Arquitetura de software e introdução ao design

A arquitetura de um sistema descreve seus principais componentes, seus relacionamentos (estruturas) e como eles interagem uns com os outros. A arquitetura e o design de software incluem vários fatores contribuintes, como estratégia de negócios, atributos de qualidade, dinâmica humana, design e ambiente de TI.

Podemos separar Arquitetura e Design de Software em duas fases distintas: Arquitetura de Software e Design de Software. DentroArchitecture, as decisões não funcionais são lançadas e separadas pelos requisitos funcionais. Em Design, os requisitos funcionais são cumpridos.

Arquitetura de software

Arquitetura serve como um blueprint for a system. Ele fornece uma abstração para gerenciar a complexidade do sistema e estabelecer um mecanismo de comunicação e coordenação entre os componentes.

  • Define um structured solution para atender a todos os requisitos técnicos e operacionais, enquanto otimiza os atributos de qualidade comuns, como desempenho e segurança.

  • Além disso, envolve um conjunto de decisões significativas sobre a organização relacionadas ao desenvolvimento de software e cada uma dessas decisões pode ter um impacto considerável na qualidade, capacidade de manutenção, desempenho e sucesso geral do produto final. Essas decisões incluem:

    • Seleção dos elementos estruturais e suas interfaces que compõem o sistema.

    • Comportamento conforme especificado nas colaborações entre esses elementos.

    • Composição desses elementos estruturais e comportamentais em um grande subsistema.

    • As decisões arquitetônicas se alinham aos objetivos de negócios.

    • Os estilos arquitetônicos guiam a organização.

Design de software

O design de software fornece um design planque descreve os elementos de um sistema, como eles se encaixam e funcionam juntos para atender aos requisitos do sistema. Os objetivos de ter um plano de design são os seguintes -

  • Negociar os requisitos do sistema e definir as expectativas com os clientes, marketing e pessoal administrativo.

  • Atue como um modelo durante o processo de desenvolvimento.

  • Oriente as tarefas de implementação, incluindo design detalhado, codificação, integração e teste.

Vem antes do design detalhado, codificação, integração e teste e depois da análise de domínio, análise de requisitos e análise de risco.

Objetivos da Arquitetura

O objetivo principal da arquitetura é identificar os requisitos que afetam a estrutura do aplicativo. Uma arquitetura bem definida reduz os riscos de negócios associados à construção de uma solução técnica e constrói uma ponte entre os requisitos de negócios e técnicos.

Alguns dos outros objetivos são os seguintes -

  • Exponha a estrutura do sistema, mas oculte seus detalhes de implementação.

  • Realize todos os casos de uso e cenários.

  • Tente atender aos requisitos de várias partes interessadas.

  • Lidar com requisitos funcionais e de qualidade.

  • Reduza a meta de propriedade e melhore a posição da organização no mercado.

  • Melhore a qualidade e funcionalidade oferecida pelo sistema.

  • Melhore a confiança externa na organização ou no sistema.

Limitações

A arquitetura de software ainda é uma disciplina emergente na engenharia de software. Tem as seguintes limitações -

  • Falta de ferramentas e formas padronizadas de representar a arquitetura.

  • Falta de métodos de análise para prever se a arquitetura resultará em uma implementação que atenda aos requisitos.

  • Falta de consciência da importância do projeto arquitetônico para o desenvolvimento de software.

  • Falta de compreensão do papel do arquiteto de software e comunicação deficiente entre as partes interessadas.

  • Falta de compreensão do processo de design, experiência em design e avaliação do design.

Papel do arquiteto de software

Um arquiteto de software fornece uma solução que a equipe técnica pode criar e projetar para todo o aplicativo. Um arquiteto de software deve ter experiência nas seguintes áreas -

Experiência em design

  • Especialista em design de software, incluindo diversos métodos e abordagens, como design orientado a objetos, design orientado a eventos, etc.

  • Liderar a equipe de desenvolvimento e coordenar os esforços de desenvolvimento para a integridade do design.

  • Deve ser capaz de revisar propostas de design e compensar entre si.

Experiência de Domínio

  • Especialista no sistema em desenvolvimento e plano de evolução do software.

  • Auxiliar no processo de investigação de requisitos, garantindo integridade e consistência.

  • Coordenar a definição do modelo de domínio para o sistema em desenvolvimento.

Experiência em tecnologia

  • Especialista nas tecnologias disponíveis que auxiliam na implantação do sistema.

  • Coordenar a seleção de linguagem de programação, framework, plataformas, bancos de dados, etc.

Expertise Metodológica

  • Especialista em metodologias de desenvolvimento de software que podem ser adotadas durante o SDLC (Software Development Life Cycle).

  • Escolha as abordagens apropriadas para o desenvolvimento que ajudam toda a equipe.

Papel Oculto do Arquiteto de Software

  • Facilita o trabalho técnico entre os membros da equipe e reforça a relação de confiança na equipe.

  • Especialista em informação que compartilha conhecimento e possui vasta experiência.

  • Proteja os membros da equipe de forças externas que os distrairiam e agregariam menos valor ao projeto.

Entregáveis ​​do arquiteto

  • Um conjunto de metas funcionais claras, completas, consistentes e alcançáveis

  • Uma descrição funcional do sistema, com pelo menos duas camadas de decomposição

  • Um conceito para o sistema

  • Um projeto na forma do sistema, com pelo menos duas camadas de decomposição

  • Uma noção do tempo, dos atributos do operador e dos planos de implementação e operação

  • Um documento ou processo que garante a decomposição funcional é seguido, e a forma das interfaces é controlada

Atributos de qualidade

Qualidade é uma medida de excelência ou o estado de estar livre de deficiências ou defeitos. Atributos de qualidade são as propriedades do sistema separadas da funcionalidade do sistema.

A implementação de atributos de qualidade torna mais fácil diferenciar um sistema bom de um ruim. Atributos são fatores gerais que afetam o comportamento do tempo de execução, o design do sistema e a experiência do usuário.

Eles podem ser classificados como -

Atributos de qualidade estática

Refletir a estrutura de um sistema e organização, diretamente relacionada à arquitetura, design e código-fonte. Eles são invisíveis para o usuário final, mas afetam o custo de desenvolvimento e manutenção, por exemplo: modularidade, testabilidade, manutenção, etc.

Atributos de qualidade dinâmicos

Reflita o comportamento do sistema durante sua execução. Eles estão diretamente relacionados à arquitetura, design, código-fonte, configuração, parâmetros de implantação, ambiente e plataforma do sistema.

Eles são visíveis para o usuário final e existem em tempo de execução, por exemplo, rendimento, robustez, escalabilidade, etc.

Cenários de Qualidade

Os cenários de qualidade especificam como evitar que uma falha se torne uma falha. Eles podem ser divididos em seis partes com base nas especificações de seus atributos -

  • Source - Uma entidade interna ou externa, como pessoas, hardware, software ou infraestrutura física que gera o estímulo.

  • Stimulus - Uma condição que precisa ser considerada quando chega a um sistema.

  • Environment - O estímulo ocorre dentro de certas condições.

  • Artifact - Um sistema inteiro ou parte dele, como processadores, canais de comunicação, armazenamento persistente, processos etc.

  • Response - Uma atividade realizada após a chegada do estímulo, como detectar falhas, recuperar da falha, desativar a fonte do evento, etc.

  • Response measure - Deve medir as respostas ocorridas para que os requisitos possam ser testados.

Atributos de qualidade comuns

A tabela a seguir lista os atributos de qualidade comuns que uma arquitetura de software deve ter -

Categoria Atributo de Qualidade Descrição
Qualidades de Design Integridade Conceitual Define a consistência e coerência do design geral. Isso inclui a maneira como os componentes ou módulos são projetados.
Capacidade de Manutenção Capacidade do sistema de sofrer alterações com certa facilidade.
Reutilização Define a capacidade de componentes e subsistemas adequados para uso em outros aplicativos.
Qualidades de tempo de execução Interoperabilidade Capacidade de um sistema ou diferentes sistemas operarem com sucesso, comunicando e trocando informações com outros sistemas externos escritos e executados por terceiros.
Gerenciabilidade Define como é fácil para os administradores do sistema gerenciarem o aplicativo.
Confiabilidade Capacidade de um sistema permanecer operacional ao longo do tempo.
Escalabilidade Capacidade de um sistema de lidar com o aumento da carga sem afetar o desempenho do sistema ou a capacidade de ser prontamente ampliado.
Segurança Capacidade de um sistema de evitar ações maliciosas ou acidentais fora dos usos projetados.
atuação Indicação da capacidade de resposta de um sistema para executar qualquer ação em um determinado intervalo de tempo.
Disponibilidade Defines the proportion of time that the system is functional and working. It can be measured as a percentage of the total system downtime over a predefined period.
System Qualities Supportability Ability of the system to provide information helpful for identifying and resolving issues when it fails to work correctly.
Testability Measure of how easy it is to create test criteria for the system and its components.
User Qualities Usability Defines how well the application meets the requirements of the user and consumer by being intuitive.
Architecture Quality Correctness Accountability for satisfying all the requirements of the system.
Non-runtime Quality Portability Ability of the system to run under different computing environment.
Integrality Ability to make separately developed components of the system work correctly together.
Modifiability Ease with which each software system can accommodate changes to its software.
Business quality attributes Cost and schedule Cost of the system with respect to time to market, expected project lifetime & utilization of legacy.
Marketability Use of system with respect to market competition.