|
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 |