|
Por ANTÔNIO MENDES DA SILVA
FILHO
Doutor
em Ciência da Computação |
|
Sistemas de Software Evolutivos
Introdução
Diversas
instituições dos mais variados segmentos têm utilizado a WWW (World-Wide
Web) a fim de disponibilizar informações, prover serviços,
comunicar-se com clientes, dentre outras coisas. Essa categoria de
sistemas baseados na Web e orientados a clientes tem como requisitos
de suma importância: facilidade de manutenção, disponibilidade de
serviços e confiabilidade operacional. Isto se deve, em parte, a
necessidade de oferecer serviços de forma ininterrupta aos
clientes, além de possibilitar fácil modificação e atualização
dos serviços [Umar97, Connalen00]. Entretanto, em sistemas
orientados para Web, questões como consistência, segurança e
distribuição encontram-se espalhadas em vários componentes do
sistema, o que dificulta qualquer modificação em pontos específicos.
A
classe de sistemas orientado para Web requer a disponibilidade de
serviços 24 horas por dia, 7 dias por semana, além do fácil
suporte às modificações a fim de atender necessidades de novos
negócios e demandas de clientes. Cabe salientar que o projeto
desses sistemas deve prover suporte para evolução rápida e confiável.
Entretanto, os esforços para a construção de sistemas orientados
para Web têm se concentrado mais no desenvolvimento, sem focalizar
simultaneamente o apoio à evolução desses sistemas. Nesse
sentido, tem-se observado que o nível de abstração concebido para
um modelo arquitetural evolutivo, expresso e implementado precisa
ser elevado e que o desenvolvimento de sistemas dessa natureza devem
explicitamente fazer uso dessas abstrações a fim de lidar com
modificações antecipadas e não antecipadas.
Atualmente,
os sistemas orientados para Web fazem reuso de frameworks e
componentes, tais como browsers, servidores e objetos de negócios,
o que resulta num menor esforço de codificação. Todavia, isto
requer que os profissionais de informática dediquem uma maior
parcela de tempo para compreender uma ampla variedade de
conhecimento de linguagens de programação, linguagens de scripting
e bibliotecas de objetos. Nesse sentido, é importante ressaltar que
esta abordagem difere daquela predominante no passado, onde o
conhecimento de uma linguagem de programação, biblioteca de
objetos e sistema operacional era suficiente. Hoje em dia, quando há
uma proliferação de sistemas orientados para Web, questões como
segurança, distribuição e persistência são, em geral, distribuídas
em diversas estruturas o que dificulta todo e qualquer tipo de
manutenção.
Adicionalmente,
as diferentes formas de representação utilizadas no
desenvolvimento desses sistemas também impõem dificuldades tanto a
verificação quanto a validação dos mesmos, refletindo
diretamente sobre a confiabilidade do sistema. Além disso, há a
necessidade de capturar o processo de desenvolvimento e as decisões
das tecnologias empregadas. Nesse sentido, a escolha adequada do nível
de abstração no processo de desenvolvimento de software,
encarregada de ‘mascarar’ diversos detalhes de variações de
implementação, constitui uma forma de lidar com os problemas de
explosão de conhecimento, separação de interesses, verificação,
validação e agilidade. Para tanto, torna-se imprescindível
priorizar os projetos arquiteturais que podem ser produzidos,
modificados e validados de maneira confiável e rápida.
Assim,
é possível apontar questões relacionadas à compreensão e
desenvolvimento de sistemas orientados para Web. Nesse sentido,
torna-se necessário definir a avaliar uma abordagem de
desenvolvimento (nova) de sistemas orientados para Web que faça uso
de abstrações declarativas associadas ao projeto arquitetural,
permitindo ocultar detalhes de implementação bem como prover
suporte à verificação, validação evolução de software. Note
que um aspecto a ser a tratado é separação de interesses que
pretende levar em consideração a evolução antecipada e não
antecipada de software. Adicionalmente, os modelos declarativos
poderão ser transformados de maneira semi-automática em múltiplas
estruturas de implementação e componentes, além de poderem ser
mapeados para outras formas de representação a fim de realizar
verificação e validação do sistema. Para tanto, pode-se:
-
Definir
e empregar uma técnica de modelagem que permita capturar a lógica
e objetos de negócios, bem como mapeá-los para um formato
declarativo.
-
Definir
técnicas orientadas a evolução que levem em conta a separação
de interesses.
-
Definir
e utilizar mecanismos que permitam a transformação do modelo
declarativo em formatos adequados tanto à verificação quanto
a validação.
Tópicos
Relacionados
Diversos
exemplos relacionam declarações em XML com linguagens específicas.
Uma solução de projeto poderia focar numa abordagem integrada para
abstrações centradas na XML, representando arquiteturas e
frameworks que iriam capturar explicitamente interesses relacionados
à evolução antecipada, bem como iriam prover notações que visam
facilitar modificações relacionadas à evolução não antecipada.
Tais abstrações serão utilizadas para gerar os componentes
operacionais do sistema e representações com o propósito de
verificação e validação.
Representações
Declarativas e Específicas do Domínio
– Diversas
linguagens de domínio específico ou DSLs (Domain-Specific
Languages) são encontradas na literatura [Neighbors94]. DSLs, em
geral, são declarativas, sendo consideradas como linguagens de
especificação para representação de frameworks e podem ser
empregadas para melhorar a manutenibilidade [Derusen98]. Cabe
destacar que especificações declarativas em XML podem ser
transformadas usando a XSL (Extended Stylesheet Language) [Clark05].
É importante observar que essas abordagens objetivam dar suporte a
mecanismos da linguagem ao invés de prover abstrações que apóiem
a evolução antecipada bem como não antecipada.
Frameworks
– Frameworks orientado a objetos, em geral, lidam com modificações
que podem ser antecipadas em tempo de projeto [Fayad99]. Embora
frameworks implementem estruturas muito flexíveis que podem ser
instanciadas para produzir aplicações, essas estruturas são
comumente complexas, difícil de compreender e reutilizar. Por
exemplo, no caso de um framework de interface de usuário, tem-se
que ele requer um período de 6 a 12 meses para se obter um nível
de produtividade elevado. Um exemplo de tratamento do problema de
usabilidade de framework é apresentado em [Gamma94].
Separação
de Interesses e Evolução
– As pesquisas em manutenção, evolução e reengenharia têm
focalizado a compreensão e análise de código fonte [Derniname99].
Notações como a UML têm sido estendidas para modelar aplicações
de hipermídia orientadas para Web fazendo uso de um conjunto de
estereótipos, valores rotulados e restrições. Já a pesquisa
sobre a evolução não antecipada inclui técnicas baseadas na
separação de interesses para estender um sistema de software.
Entretanto, não há suporte declarativo para combinar interesses no
desenvolvimento de frameworks e para assegurar que eles sejam
combinados corretamente e não venham a corromper invariantes do
sistema.
Modelagem
Formal, Verificação e Validação
– Na literatura, encontram-se diversas aplicações de verificação
e validação formal que fazem uso de provadores de teoremas e
verificação de modelos. Verificadores de modelos, tais como XMC,
SMV e SPIN [Holtzman96] verificam as propriedades decorrentes do
comportamento infinito de um sistema para validar como segurança, liveness
e outras propriedades. As técnicas de verificação de modelo e
programação lógica (Prolog – XSB [Ramakrishna97]) combinadas e
as ferramentas relacionadas parecem não terem sido utilizadas para
validar a evolução de sistemas tratados, levando em consideração
restrições e propriedades desejadas.
Considerações
Finais
O
desenvolvimento de sistemas de software orientados para Web
considera o reuso de componentes e frameworks, tais como browsers,
servidores e outros componentes que resulta em menos linhas de código.
Em tal situação, é necessário compreender e dedicar mais tempo a
uma ampla variedade de detalhes de implementação relacionados a
componentes, servidores e tecnologias de interconexão. Note que a
equipe que desenvolve originalmente o sistema, em geral, não
documenta adequadamente o sistema e as decisões de projeto e
implementação associadas. Além disso, ao longo do tempo, o
conhecimento associado ao desenvolvimento do sistema se perde em função
da equipe migrar para outras tarefas ou instituições, o que
resulta num enorme esforço de aprendizado para qualquer nova equipe
devido à necessidade de analisar e compreender muitos diferentes
tipos de componentes e tecnologias de interconexão. Dessa forma,
tem-se que a manutenção de sistemas legados orientados para Web
terá maior custo e exigirá mais tempo.
Enquanto
as pesquisas atuais se concentram mais no projeto e desenvolvimento
desses sistemas, a solução sugerida aqui neste texto visa agregar
um modelo declarativo encarregado de tratar a separação de
interesses associadas à evolução antecipada e não antecipada,
bem como o projeto, desenvolvimento e validação arquitetural. Note
ainda que a camada de abstração incorporada numa abordagem
declarativa tem por objetivo ocultar diversos detalhes das aplicações
Web atuais.
|
|

|
|
Referências
[Clark05]
Clark, J., XSL Transformations (XSLT)
Specification 1.0, W3C Recommendation. Acessado em Janeiro de
2005.
[Connalen00]
Connalen, J., Building Web Applications with UML, Addison-Wesley,
2000.
[Derniname99]
Derniame, J.C., Kaba, B.A., Wastell, D. (Eds), Software Process:
Principles, Methodology, and Technology, Springer-Verlag LNCS
1500, 1999.
[Derusen98]
Derusen, A., Klint, P., Little Languages: Little Maintenance,
Journal of Software Maintenance, vol. 10, pp. 75-92, 1998.
[Gamma94]
Gamma, E., Helm, R., Johnson, R., Vlissides, J., Design Patterns:
Elements of Reusable Object-Oriented Software, Addison-Wesley,
1994.
[Holtzman96]
Holtzman, G.J., Peled, D., The State of SPIN, in Alur and
Henzinger, pp. 385-389, 1996.
[Ramakrishna97]
Ramakrishna, Y. S., Ramakrishna, C. R., Ramakrishna, I. V., Smolka,
S. A., Swift, T. W., and Warren, D. S., Efficient Model Checking
Using Tabled Resolution, in Grumberg, editor, Computer Aided
Verification (CAV’97), volume 1243 of Lecture Notes in Computer
Science, Haifa, Israel, Springer-Verlag, 1997.
[Umar00]
Umar, A., Application (Re-)Engineering: Building Web-Based
Applications and Dealing with Legacies, Prentice Hall, 1997. |
|