ANTONIO MENDES DA SILVA FILHO

Doutor em Ciência da Computação (UFPE)

 

 

Componente de Software: componentização no desenvolvimento de software

Antonio Mendes da Silva Filho

 

“The important thing is not stop questioning”

Albert Einstein

 

Um dos principais atributos para se alcançar a maturidade em uma disciplina de engenharia é o uso rotineiro de soluções existentes no desenvolvimento de novos sistemas. Em uma estratégia de reuso de software, enfatiza-se a importância do reuso centrado na arquitetura e, especificamente em componentes, objetivando o desenvolvimento de sistemas de software. Dentro deste contexto, a arquitetura de software serve como uma organização do sistema, permitindo seu entendimento em termos de componentes, inter-relacionamentos e propriedades consistentes ao longo do tempo e implementações. Este artigo discute um conjunto de aspectos da componentização.

Introdução

Há, aproximadamente, quatro décadas atrás, software constituía uma pequena senão ínfima parcela dos sistemas computacionais quando comparado ao hardware. Naquela época, os custos de desenvolvimento e manutenção de software eram desprezíveis. Hoje, porém, software é responsável por significativa porção dos sistemas computacionais. Encontramos software nas mais diversas aplicações. No uso doméstico, fazemos uso de processadores de texto e planilhas eletrônicas. Entretanto, software tem sido elemento chave e muito utilizado em sistemas de grande porte.

Podemos exemplificar seu uso no controle e supervisão dos sistemas de geração/distribuição de energia bem como em sistemas de telecomunicações, onde ele é encarregado do roteamento e controle de milhares de ligações telefônicas. Hoje em dia, empresas e pessoas têm conseguido otimizar suas atividades, geralmente, fazendo uso de sistemas computacionais. O computador tem se tornado um companheiro e sido uma ferramenta fundamental em nosso cotidiano.

Todavia, ao mesmo tempo em que os sistemas computacionais têm tornado-se quase ubíquos em inúmeras aplicações, tamanho e complexidade do software têm aumentado tanto que as técnicas de abstração utilizadas até o final dos anos 80 (como, por exemplo, tipos de dados abstratos, linguagens de programação de alto nível e técnicas de decomposição modular) já não são mais suficientes para lidar com esses novos problemas envolvendo o projeto de software a nível de sistema. Isto se refere ao nível de organização de um sistema ou, mais propriamente, o nível de arquitetura de software, quando se lida com componentes.

Diferentemente do uso de técnicas que empregam algoritmos, estruturas de dados e as linguagens de programação que as implementam, o crescimento em escala dos sistemas de software demandou notações para conectar módulos, técnicas para gerenciar configurações e controlar versões. Entretanto, à medida que os sistemas tornavam-se maiores e mais complexos, outros fatores como, por exemplo desempenho e qualidade, passaram a ser considerados também. Tais fatores estão intimamente relacionados à organização global do sistema de software o qual é objeto de discussão neste artigo.

A necessidade da componentização

A ‘componentização’ tem entrado em cena de modo a lidar com sistemas grandes e complexos. O desenvolvimento de software no nível arquitetural compreende questões estruturais, dentre as quais, destacam-se:

  • seleção de alternativas de projeto;

  • escalabilidade e desempenho;

  • organização e estrutura geral de controle;

  • protocolos de comunicação, sincronização;

  • atribuição de funcionalidade a componentes de projeto.

Ademais, torna-se cada vez mais evidente que processos de engenharia de software requerem projeto arquitetural de software. Primeiro, é importante ser capaz de reconhecer estruturas comuns utilizadas em sistemas já desenvolvidos possibilitando aos projetistas de software compreender as relações existentes entre sistemas e desenvolver novos sistemas baseado em variações de sistemas antigos. Segundo, o entendimento de arquiteturas de software existentes permite aos engenheiros tomarem decisão sobre alternativas de projeto. Terceiro, uma descrição arquitetural do sistema é essencial a fim de analisar e descrever propriedades de um sistema complexo. Quarto, o conhecimento de notações formais para descrição de paradigmas arquiteturais permite que engenheiros possam apresentar novos projetos de sistemas para outras pessoas e instituições.

O papel da arquitetura de software

A idéia básica de arquitetura de software é aquela de que um sistema de software em elevado nível de abstração pode ser descrito através de subsistemas ou componentes distintos, sendo estes interrelacionados. Perceba que uma arquitetura de referência constitui um elemento fundamental para o desenvolvimento de linhas de produção de software, onde múltiplos sistemas com funcionalidades distintas podem ser concebidos. Examinando o papel da arquitetura em um contexto mais amplo do gerenciamento de processo de software e da tentativa de ordenar as diversas técnicas que têm surgido, possíveis benefícios compreendem:

  • atuar como uma estrutura a fim de atender as requisitos de sistema;

  • prover suporte ao reuso.

  • ser utilizada como aspecto técnico para o projeto de sistema bem como suporte na estimação de custos e gerência de processo;

  • servir de base para análise de consistência e dependência;

Considere a Figura 1 que ilustra um afunilamento nas descrições arquiteturais de um sistema.

Figura 1 – Níveis de descrição de um sistema.

 

O processo de desenvolvimento de um sistema de software vai desde a concepção do sistema, quando requisitos são elicitados e analisados até sua concreta implementação. Conforme mostrado na Figura 1, na fase inicial do processo há um interesse em compreender a funcionalidade que o sistema deverá prover sem que haja necessidade de se tomar qualquer decisão a nível estrutural ou arquitetural. Uma forma de entender a funcionalidade e serviços a serem oferecidos pelo sistema é compreendendo a funcionalidade oferecida por sistemas similares.

É fácil perceber que nesta fase inicial existe uma maior gama de soluções.       Por outro lado, durante a implementação, decisões já foram tomadas e uma única arquitetura é implementada. Entretanto, antes da implementação de uma arquitetura, a funcionalidade do sistema é particionada a fim de identificar possíveis componentes. Isto permitirá analisar os componentes compondo o sistema bem como os requisitos, visando encontrar ou apresentar uma arquitetura que satisfaça às necessidades do sistema. Neste caso, as arquiteturas podem ser vislumbradas como referências que retratam as funcionalidades levantadas durante a decomposição funcional, acarretando numa alocação funcional a uma descrição arquitetural.

Para finalizar, cabe destacar que a componentização é fator crítico de sucesso para sistemas de software e 4 aspectos essenciais de serem considerados compreendem:

(i) modelo arquitetural de domínio;

(ii) requisitos de referência;

(iii) arquitetura de referência;

(iv) processo de desenvolvimento.

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.sharedinsights.com/networks/ea/

http://www.espacoacademico.com.br/068/68amsf.htm

http://www.espacoacademico.com.br/016/16amsf.htm

   

 

 

versão para imprimir (arquivo em pdf)

incluir email
cadastre seu email e receba a REA
E-mail:
participe

 

 

clique e acesse todos os artigos publicados...   

http://www.espacoacademico.com.br - © Copyleft 2001-2008

É livre a reprodução para fins não comerciais, desde que o autor e a fonte sejam citados e esta nota seja incluída