When we build, let us think that we build for ever. (John Ruskin)
Atualmente, há no mundo quase 1 trilhão de linhas de código escritas em pouco mais de 500 linguagens. Adicionalmente, tem-se uma variedade de plataformas e utilitários de apoio que evoluem constantemente. Concomitante a isso, a pressão do mercado para reduzir o tempo de desenvolvimento dos produtos, exige dos desenvolvedores a habilidade de construir sistemas com qualidade e requer dos gerentes de projeto a capacidade de gestão que visa garantir tanto a entrega do produto quanto a satisfação do cliente. Nesse sentido, tem havido esforços para reutilizar artefatos desenvolvidos em projetos anteriores.
O reuso de artefatos é possível quando se tem o projeto arquitetural do sistema, pois este orienta o processo de desenvolvimento, permitindo antever atributos de qualidade do sistema, além de melhor administrar o cronograma de execução do projeto.
A inserção do projeto arquitetural no ciclo de vida de desenvolvimento de software é fruto do crescimento em tamanho e em complexidade dos sistemas de software. Aqui, um aspecto essencial é a riqueza de informações oferecida pela arquitetura. Considere, por exemplo, a planta baixa de uma casa que permite qualquer pessoa visualizar os cômodos da casa, sua distribuição, acesso aos cômodos, a interligação entre eles, penetração da luz solar, circulação de ar, dentre outras características. Tudo isso fornece uma visão do todo. Uma arquitetura de software, similarmente, é uma estrutura ou conjunto de estruturas de um sistema que compreende os componentes de software, as propriedades externamente visíveis desses componentes, bem como o inter-relacionamento entre eles.
Avaliação de qualidade
Vale ressaltar que a arquitetura serve como um meio de comunicação entre as partes interessadas de um projeto e oferece suporte às decisões no decorrer de um projeto, estando num nível de abstração que possibilita seu reuso e transferência em sistemas. Nesse sentido, cabe destacar que a arquitetura de software:
(1) constitui um artefato reutilizável,
(2) suporta o desenvolvimento baseado em componentes e linha de produto,
(3) oferece um vocabulário de projeto,
(4) separa funcionalidades,
(5) vincula o projeto a atributos de qualidade e
(6) dispõe de mecanismos de interconexão.
Perceba que arquitetura de software é um elemento essencial em qualquer projeto de sistema de software atuando como um elo entre requisitos e código.
Dentro deste contexto, torna-se cada vez mais necessário capacitar profissionais com habilidade de construir soluções em níveis distintos de abstração. Ao organizar uma solução em níveis discretos, o profissional é capaz de concentrar-se num único aspecto da solução, desconsiderando outras questões e complexidades existentes. Assim, a capacitação de novos profissionais deve primar por apresentar técnicas de como ‘componentizar’ uma solução de modo que o sistema resultante ofereça suporte a um conjunto de atributos da qualidade.
Adicionalmente ao que foi discutido acima, cabe salientar que software é um elemento ubíquo, encontrado nas mais variadas aplicações, desde um simples jogo que roda em aparelhos celulares até caixas eletrônicos de bancos, salas de controle de tráfego de metrô e avião. A sociedade tem demandado cada vez mais sistemas que têm natureza distribuída e complexa em ambientes heterogêneos. Apesar dessa necessidade, não há, no mercado, profissionais para atender essa demanda por sistemas com qualidade. E por que isso acontece? Uma significativa parte dos profissionais que chega ao mercado não tem conhecimento de como:
(1) fazer avaliação e implantação de arquitetura de software em projetos ou sistemas,
(2) fazer análise de integração e custo de manutenção de sistemas,
(3) fazer o projeto arquitetural para desenvolvimento de código e sistema com qualidade, e
(4) fazer avaliação da qualidade do código, considerando o uso de métricas.
Benefícios decorrentes
Onde encontrar a solução? Ela está na arquitetura de software que serve de fundamento a qualquer sistema. Arquitetura de software pode tanto permitir quanto impedir a obtenção dos atributos de qualidade de qualquer sistema de software. Atributos como desempenho, segurança, confiabilidade, robustez e usabilidade são determinados pela arquitetura de software. Trata-se, portanto, de uma área do conhecimento de suma importância, pois ela:
(1) serve como veículo de comunicação entre aqueles envolvidos num projeto,
(2) contribui efetivamente para as tomadas de decisões em qualquer projeto de software e
(3) constitui uma abstração reutilizável e, portanto, transferível entre sistemas.
Todavia e lamentavelmente, arquiteturas de software recebem pouco ou nenhum tratamento sistemático na maioria dos cursos de Computação e correlatos, tanto no nível de graduação quanto de pós-graduação. Quando muito, estudantes são expostos a uma ou duas arquiteturas de aplicação (tais como para um compilador ou para partes de um sistema operacional) e podem ‘ouvir’ algo sobre paradigmas arquiteturais. Pouco ou quase nada tem sido feito no sentido de desenvolver habilidades de arquiteto de software. Portanto, torna-se necessário capacitar novos profissionais e reciclar aqueles que já estão no mercado de trabalho mostrando como arquitetura de software pode ser usada na prática, destacando:
**
(Práticas de) Como um arquiteto de software pode organizar o código de um sistema;**
Como um arquiteto avalia e implanta arquiteturas de software em projetos e sistemas;**
Como um arquiteto de software atua no processo de desenvolvimento de software;**
Como um arquiteto avalia a qualidade do código baseada métricas de produto;**
Como reduzir custos de manutenção e amortizar custos de desenvolvimento;**
Como obter benefícios decorrentes de um projeto bem arquitetado.Leitores interessados no tópico podem encontrar mais informações no sites:
http://www.wwisa.org/wwisamain/index.htm
http://www.sei.cmu.edu/architecture/sat_init.html
http://www-306.ibm.com/software/rational/
http://www.sharedinsights.com/networks/ea/
http://www.espacoacademico.com.br/016/16amsf.htm
******
Doutor em Ciência da Computação (UFPE)