Domingo, 17 de Dezembro de 2017
ISSN 1519-7670 - Ano 19 - nº970

E-NOTíCIAS > ARQUITETURA DE SOFTWARE

Sobre a importância do reuso

Por Antonio Mendes da Silva Filho em 16/01/2007 na edição 416

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)

Todos os comentários

  1. Comentou em 18/01/2007 Ivan Moraes

    Parte 4- ainda questiionando dados: Aih esta hoje a industria de programacao dos EUA **importando** milhares de hindus porque nao tem uma, digamos ‘infraestrutura’ mental na qual o talento computacional pode se desenvolver. Foi o abandono das linguas de alto nivel que fechou a porta. Se a industria tem a necessidade ,que faca o favor de desempinar o nariz e olhar pra baixo e esperar 10 anos pra ter resultado, porque a maioria das pessoas que teem talento pra programacao terminam indo fazer outra coisa porque nao veem uma porta de entrada aos conceitos basicos da computacao. Boa ideia como seria um curso intensivo de teoria do conhecimento, tambem eh completamente irrealistica, dado a situacao com linguagens de computacao e humanas, que mais escondem do que revelam.

  2. Comentou em 18/01/2007 Ivan Moraes

    Parte 4- ainda questiionando dados: Aih esta hoje a industria de programacao dos EUA **importando** milhares de hindus porque nao tem uma, digamos ‘infraestrutura’ mental na qual o talento computacional pode se desenvolver. Foi o abandono das linguas de alto nivel que fechou a porta. Se a industria tem a necessidade ,que faca o favor de desempinar o nariz e olhar pra baixo e esperar 10 anos pra ter resultado, porque a maioria das pessoas que teem talento pra programacao terminam indo fazer outra coisa porque nao veem uma porta de entrada aos conceitos basicos da computacao. Boa ideia como seria um curso intensivo de teoria do conhecimento, tambem eh completamente irrealistica, dado a situacao com linguagens de computacao e humanas, que mais escondem do que revelam.

x

Indique a um amigo

Este é um espaço para você indicar conteúdo do site aos seus amigos.

O Campos com * são obrigatórios.

Seus dados

Dados do amigo (1)

Dados do amigo (2)

Mensagem