Wednesday, 24 de April de 2024 ISSN 1519-7670 - Ano 24 - nº 1284

Sobre a importância do reuso

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)