Software Architecture: a Roadmap.

Um dos elementos mais importantes para proporcionar ganhos em agilidade, eficiência, manutenção e evolução dos sistemas de informação é a arquitetura de software, contudo, à medida que os sistemas tornam-se maiores, o uso de princípios deve ser destacado de modo a obter vantagens no retorno e investimento considerando prazos e custos finais, com isso a arquitetura de software tem entrado em cena de modo para lidar com esses sistemas grandes e complexos, assim, algoritmos e estruturas de dados deixaram de ser o ponto mais crítico do projeto de construção de sistema de informação. Ao longo da última década arquitetura de software tem recebido cada vez mais atenção como uma importante área de software engenharia.

Os profissionais têm percebido que a arquitetura é um fator crítico de sucesso para os sistemas de informação, no entanto, apesar desse progresso, a arquitetura de software continua a ser relativamente imatura.

No artigo “Software Architecture: a Roadmap”, de David Garlan (2000), descreve algumas das importantes tendências de arquitetura de software na pesquisa e prática, assim trago um resumo de algumas dessas questões.

O papel da arquitetura de Software

A arquitetura de software pode desempenhar um importante papel em pelo menos, seis aspectos no desenvolvimento do software.

  • Compreensão: A arquitetura simplifica a capacidade de compreender os grandes sistemas, apresentando um nível de abstração em que um sistema de projeto de alto nível pode ser facilmente compreendido.
  • Reutilização: A reutilização de software tem sido bastante apontada como um fator de grande economia de tempo. Assim, desenvolvedores de outro projeto podem beneficiar-se reutilizando seu código, ao invés de reinventá-lo.
  • Construção: Uma descrição da arquitetura fornece um modelo parcial para o desenvolvimento através de principais componentes e dependências entre eles.
  • Evolução: Quando o software atinge um estágio de desenvolvimento considerado satisfatório para um determinado usuário do sistema, pode não ser satisfatório para todos os usuários, mesmo que o grupo de desenvolvedores abandone o projeto em algum momento, nada impede que outros desenvolvedores continuem o desenvolvimento em uma versão paralela ou mesmo assumam a administração da original.
  • Análise: Uma arquitetura adequada fornece novas oportunidades para análise, e restrições imposta pelo estilo da arquitetura.
  • Gestão: Projetos onde são utilizadas uma arquitetura de software adequada leva a uma compreensão muito mais clara das necessidades, estratégias de implementação e riscos.

O arquiteto de software deverá ter um foco nas implicações que os objetivos organizacionais terão sobre as opções técnicas, ou seja, uma visão global do sistema. Deverá construir modelos para o problema em mãos, buscando achar uma solução e buscando sempre abordagens alternativas, a documentação é imprescindível a fim de apresentar e discutir com os demais membros da equipe de desenvolvimento e com o gerente responsável pelo projeto.

Passado da arquitetura de Software

A origem da arquitetura de software foi primeiramente identificado na pesquisa de Edsger Dijkstra em 1968 e David Parnas no início de 1970. Estes cientistas enfatizaram a importância das estruturas de um sistema de software e a importância da identificação da sua estrutura.

Há anos atrás, as arquiteturas foram em grande parte ad hoc e estas arquiteturas raramente eram mantidas uma vez que o sistema tivesse sido construído, como as pessoas começaram a compreender o papel fundamental que desempenha no projeto arquitetônico determinar o sucesso do sistema, eles também começaram a reconhecer a necessidade de uma abordagem mais organizada. Os primeiros autores começaram a observar certos princípios em projetos para chamar a arquitetura como um campo importante no desenvolvimento e estabelecer um padrão de trabalho para arquitetos de software.

Presente da arquitetura de software

Atualmente a tecnologia móvel está entre as mais promissoras do mercado, a necessidade de integração com outras plataformas e dispositivos, o constante crescimento na capacidade de processamento e uma ampla necessidade por aplicativos com requisitos mais complexos por parte dos usuários, são apenas alguns fatores que incrementam a dificuldade no desenvolvimento.

Entretanto poucas propostas foram definidas focando as características específicas desta área e desta plataforma. Esse desenvolvimento na grande maioria, ainda se faz por técnicas advindas de outras plataformas, muitas vezes inadequadas. Embora não haja grande variação, de um modo geral a arquitetura é muito mais visível como uma importante atividade no desenvolvimento de software, muita coisa mudou na última década, além da base tecnológica para a arquitetura de software ter melhorado dramaticamente.

Linhas de Produtos e Padrões

Uma dessas tendências tem sido o desejo de explorar a frequência em vários produtos, com isso uma nova abordagem de reuso de software tem motivado os desenvolvedores, essa abordagem é conhecida como Linhas de Produtos de Software que é baseada na reutilização de artefatos de software onde são estabelecidos sob uma mesma arquitetura. Esse novo conceito tem sido utilizado pelos desenvolvedores para reduzir custos e aumentar a sua produtividade, porém esta adoção há riscos que devem ser avaliados antes de iniciar este tipo de reuso.

Os projetos que fizeram uso de reutilização de software mostraram que sem um planejamento adequado, os custos do projeto com reutilização podem ser bem maiores do que para desenvolver os artefatos a partir do zero. Desse modo é fundamental um planejamento com antecedência dos produtos para os quais a reutilização será aplicada, sem duvidas as organizações podem obter benefícios consideráveis em termos de redução de custos e tempo de colocação no mercado, aumento na qualidade do produto, aplicando desenvolvimento de linhas de produto.

Codificação e Divulgação

Um impedimento cedo para o surgimento de arquitetura de software como uma disciplina de engenharia de software foi a falta de compartilhada conjunto de conhecimentos sobre arquiteturas e técnicas para desenvolver bons resultados

Embora reconhecendo o valor de uniformidade estilística, realidades de construção de software, muitas vezes forçar um para compor sistemas a partir de peças que não foram arquitetados de uma forma uniforme.

Por exemplo, pode-se combinar um banco de dados a partir de um fornecedor, com middleware de outro, e uma interface de usuário de um terço. Nesses casos, as partes nem sempre funcionam bem juntos em grande parte porque eles fazem conflitantes suposições sobre os ambientes em que eles foram projetados para trabalhar. Isto conduziu ao reconhecimento de a necessidade de identificar estratégias arquiteturais para evitar problemas.

Futuro

Embora hoje a arquitetura de software seja uma base muito mais sólida do que há uma década, não é ainda estabelecida como uma disciplina que é ensinada e praticada universalmente toda a indústria de software. Uma razão para isso é simplesmente que é preciso tempo para novas abordagens, outra razão é que a base tecnológica para o projeto de arquitetura é ainda imaturo, mas a tendência da evolução natural da área é trazer avanços contínuos.

No entanto, o mundo do desenvolvimento de software e os contextos em que o software está sendo usado está mudando em significativa maneiras. Essas mudanças prometem ter um grande impacto sobre a forma como é praticada a arquitetura de software, são consideradas três das tendências mais proeminentes e suas implicações para o campo da arquitetura de software.

Comprar ou desenvolver??

Enquanto comprar um software significa adaptar os processos de negócio ao software, desenvolver significa construir uma aplicação que atenda a um processo específico.

Na verdade, muitos as empresas estão rapidamente encontrando-se mais na posição de integradores de sistema que os desenvolvedores de software. Isto é, a maior parte do código que eles fazem é escrever código “copiar e colar”. Há uma série de consequências para a arquitetura de software, essa tendência aumenta a necessidade de toda a indústria.

Esta tendência é evidente na crescente popularidade do software ‘componente baseado em’ desenvolvimento. Ao escolher os componentes que concordam relativamente a um quadro comum de arquitetura, tais como JavaBeans, ou CORBA, muitos dos problemas da arquitetura e incompatibilidade são aliviadas, deve-se levar em consideração as expectativas em relação ao software e quanto se tem a investir para realizar essa escolha.

Computação distribuída

Os últimos anos trouxeram mudanças importantes na área de desenvolvimento de software, como a criação de padrões que permitiram que sistemas fossem integrados mais rapidamente, suportando um número crescente de usuários e aplicações através da internet. Com a criação do conceito de Web Services e sua materialização através dos protocolos HTTP + SOAP, os serviços foram definitivamente expostos na Internet.

A Desde então surgiram conceitos como computação na nuvem e software como serviço (SaaS — Software as a Service). O software como serviço, seja através de uma infraestrutura local ou através de datacenters espalhados pelo mundo, permite que funcionalidades de aplicações sejam oferecidas como serviço pela Internet e consumidas sob demanda, de forma flexível e dinâmica.

Percebe-se claramente a evolução de TI de sistemas de produção de software monolíticos, similares aos sistemas de produção criados por Enri Ford, onde o cliente não participa do processo, sendo apenas um consumidor do bem produzido, para software como um serviço; sendo este último um processo de intensa participação do usuário consumidor.

Com o este crescente aumento do uso da Internet e a redução dos preços de computadores contribuiu para a criação de um modelo com aplicações distribuídas, cada vez mais, o PC e uma variedade de outras interfaces (dispositivos portáteis, laptops, telefones) são utilizados como uma interface de usuário que fornece acesso a dados e de computação remota, essa tendência não é surpreendente, pois um modelo centrado na rede oferece vantagens significativas.

Ela promove a mobilidade do usuário por meio do acesso a informações e serviços, essa tendência tem uma série de consequências para a engenharia e arquitetura de software, para tais sistemas de um novo conjunto de desafios arquitetura de software surgem, esses desafios podem ser eficientemente dirigidos com os recursos que a computação na nuvem oferece, o desafio é estabelecer uma arquitetura mínima, capaz de suportar o trafego de acessos e ter um recursos disponíveis quando necessário.

Computação Ubíqua ( Internet das coisas )

A terceira tendência é relacionado para computação pervasiva em que o universo da computação é povoado por uma rica variedade de dispositivos de computação: torradeiras, casa sistemas de aquecimento, sistemas de entretenimento, carros inteligentes, etc.

Além disso, estes dispositivos são susceptíveis de ser bastante heterogêneo, o que requer especiais considerações em termos de seus recursos físicos e poder de computação.

Há uma série de consequentes desafios para a arquitetura de software. Por exemplo, pode ser desejável ter uma arquitetura que permita modificar a fidelidade de computação baseado sobre as reservas de energia à sua disposição.

Embora isto possa ser adequado para ambientes em que temos apenas alguns dispositivos de computação, relativamente estáticos (tal como PCs e notebooks), ele não escala para ambientes com centenas de dispositivos. Devemos, portanto, encontrar arquiteturas que forneçam um controle muito mais automatizado sobre a gestão dos serviços computacionais, e que os usuários de permissão para mover-se facilmente de um ambiente para outro.

A arquitetura de software cresceu consideravelmente nos últimos dez anos, e promete continuar esse crescimento para um futuro previsível. Muitas das soluções para esses desafios são susceptíveis de surgir como uma consequência natural das práticas arquiteturais, outros desafios surgem com a evolução da computação e as necessidades para software: estes serão necessárias novas inovações significativas, propondo uma abordagem que ajuda a gerenciar a complexidade no desenvolvimento de software. Criar abordagens que possibilitam visualizar o sistema em módulos e observar as relações entre eles, tornando assim a implementação muito mais eficaz e eficiente.

A arquitetura consiste em um modelo de alto nível que possibilita um entendimento e uma análise mais fácil do software a ser desenvolvido, para se representar essas soluções, a arquitetura de software como solução mais adequada para atender aos requisitos do software, uma avaliação dessa estrutura deve ser realizada.

As organizações podem obter benefícios consideráveis em termos de redução de custos e tempo de colocação no mercado, aumentando a qualidade do produto final utilizando técnicas adequadas de arquitetura de software, porém há riscos e custos associados à adoção destas praticas que devem ser avaliados antes de embarcar nessa iniciativa.

Fonte: “Software Architecture: a Roadmap”, de David Garlan (2000).


Gostou? Tem mais lá no Medium e outros artigos aqui no blog.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *