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. |