ESTUDO E IMPLEMENTAÇÃO DE UM GERADOR DE CÓDIGO PARA
MIGRAÇÃO DE APLICAÇÕES LEGADAS
Resumo. O objetivo deste trabalho é apresentar um estudo sobre manutenção de aplicações legadas, sob a
perspectiva dos geradores de código: como eles podem ajudar neste processo de migração, padronização e
qualidade do código gerado. Como resultado, foi desenvolvido um gerador de código com para auxiliar a migração
de aplicações legadas, padrão xBase, para tecnologias e padrões atuais.
Abstract. The aim of this paper is to present a study on maintenance the legacy applications, from the perspective of
code generators: how they can help in this migration process, standardization and quality of generated code. As a
result, we developed a code generator to help with the migration of legacy applications, standard xBase based to
current technologies and patterns.
1 Introdução
Anos atrás, a programação representava a maior parte do trabalho de produção de software,
havendo basicamente uma única maneira de fazer as coisas. A análise de sistemas era pouco
explorada, resumindo-se apenas a normalização de dados e programação.
Os paradigmas das linguagens de programação mudaram e muitos dos sistemas que existem
foram criados em linguagens estruturadas imperativas sem a utilização dos recursos de reutilização
de código (SEBESTA, 2000).
A maioria das empresas necessita reprojetar seus sistemas para tirar vantagem das novas
tecnologias, eliminando redundâncias e burocracia, dotando os seus colaboradores de meios que os
permitam agilizar a gestão da organização. Para tanto, quando houver mudanças nas políticas
organizacionais, os sistemas devem se regenerar com rapidez para refletir essas mudanças
(MARTIN, 1997).
Um software, ao longo do tempo, passa por uma série de modificações para que este possa
atender às expectativas do cliente e do negócio. Estas modificações são necessárias para suportar a
evolução da aplicação. Uma das formas de realizar modificações no software é usar técnicas de
manutenção, como Reengenharia e Engenharia Reversa (SWEBoK, 2004; SOMMERVILLE,
2003). Além destas técnicas, faz-se necessário o uso de ferramentas de conversão e geradores de
código para apoiar este processo (FONTANETTE, 2004).
Conforme (MARTIN & McCLURE, 1991), os geradores de código são ferramentas que
geram artefatos, a partir de especificações de alto nível. Além disso, são extremamente práticos
quando o fator tempo e time são determinantes para o projeto em questão (SANTOS, 2002).
Apesar dos ganhos em ordem de grandeza proporcionados pela adoção de geradores de
código, poucas organizações se beneficiam desta técnica (FRANCA & STAA, 2002). Esta baixa
adoção pode ser explicada pela complexidade envolvida na construção de geradores, ressaltando
que, como qualquer outra nova tecnologia, após os aspectos técnicos serem dominados, os aspectos
gerenciais e culturais devem ser considerados para garantir o sucesso na introdução de geradores no
processo de desenvolvimento das organizações (FRANCA & STAA, 2002).
O objetivo principal deste artigo é apresentar um estudo sobre manutenção e aplicações
legadas, sob a perspectiva dos geradores de código: como eles podem ajudar neste processo de
migração, padronização e qualidade no código da aplicação resultante.
2 Fundamentação Teórica
2.1 Aplicações Corporativas e Sistemas Legados
Existem diferentes tipos de software, cada qual com seus próprios desafios e complexidades
(SEACORD, 2003). As aplicações corporativas muitas vezes têm dados complexos – e uma
quantidade grande deles – para trabalhar, aliados a regras de negócio específicas. Embora algumas
técnicas e padrões sejam relevantes para todos os tipos de software, muitos são relevantes apenas
para um ramo específico (HEUVEL, 2007).
Segundo (FOWLER, 2006), as aplicações corporativas normalmente envolvem: dados
persistentes (múltiplas execuções; alterações nos programas que usam estes dados; sobrevida em
relação ao hardware e sistemas operacionais; alterações na estrutura de dados para armazenar novas
informações; passível de migração de dados), grande quantidade de dados (gerência de um grande
volume de dados, gerando novos papéis em times de software), acesso a dados concorrentes
(controle de transações), interface com usuário e comunicação com outras aplicações corporativas
(sistemas legados, tecnologias de comunicação, diferentes fornecedores de produto).
Estratégias foram definidas para conversão e migração destas aplicações para novas
tecnologias (O´BRIEN, 2006; SOFTWAREREMINING, 2009). A figura 1 apresenta algumas
destas estratégias.
Figura 1 – Estratégias de migração de sistemas (O´BRIEN, 2006)
A construção de um gerador de código para auxiliar na migração de aplicações xBase é
justificada devido ao fato de existir um grande número de aplicações legadas, como aplicações
FoxPro e Clipper (LONG, 1993; COSTA, 1998).
2.2 Geradores de Código
Os geradores de código são criados com o intuito de diminuir o trabalho do desenvolvedor
para rotinas repetitivas e que tomam certo tempo (SANTOS, 2002). Dentre as principais
características observadas nos geradores de código são a possibilidade de troca de linguagem pelo
desenvolvedor para uma aplicação e a utilização de diferentes bancos de dados.
Cabe ao gerador de código escrever código automaticamente para a linguagem escolhida e
para o banco de dados escolhido.
O gerador é apresentado como uma importante solução para implementação de uma linha de
produtos de software. O desenvolvimento para Web, onde técnicas de geração são utilizadas para
produção de páginas dinâmicas, também contribui para que o tema geradores de código, passando a
ser discutido por uma maior número de desenvolvedores (FRANCA & STAA, 2002).
Figura 2 - Arquitetura padrão de um gerador de artefatos (FRANCA e STAA, 2002)
A figura 2 sintetiza a arquitetura padrão de um gerador de código. Os componentes básicos
da arquitetura são o analisador de especificação e o gerador de artefato.
A utilização dos geradores apresenta algumas vantagens, descritas a seguir:
 Operação Automática: Uma vez que a aplicação tenha sido carregada com as informações
a serem processadas e instruções do que fazer, poderá processar a informação sem qualquer
intervenção humana.
 Flexibilidade: Após a criação do código de saída, surge a possibilidade de serem mudadas
as sequências de instruções de controle.
 Padronização: O código de saída pode conter/ser definido a partir de uma nomenclatura
padrão, facilitando a intervenção humana no código gerado.
Existem inúmeros tipos de geradores de código e de aplicações, que vão desde o mais básico
(compiladores), passado por IDEs até os mais avançados, geradores baseados em templates e metaprogramação (MAIA & OLIVEIRA, 2002).
3 GISCODE: Protótipo de Gerador de Código
O GISCODE é um protótipo de gerador de código, desenvolvido com o objetivo de auxiliar
na migração de aplicações legadas, baseadas em tecnologia xBase, inicialmente, para tecnologia
.NET. Alguns trabalhos influenciaram a concepção e desenvolvimento do GISCODE, como
(CODEGENERATION, 2009; CODEPROJECT, 2009; CODESMITH, 2009; MYGENERATION,
2009; SANTOS, 2002).
O GISCODE foi concebido, devido à necessidade de migrar aplicações desenvolvidas em
diferentes versões do FoxPro (LONG, 1993; SIEGEL, 1994; COSTA, 1998; SILVA, 2000;
VASQUEZ, 2003), usando o paradigma estruturado para um paradigma mais atual, a Orientação a
Objetos (LARMAN, 2007).
A tecnologia inicialmente escolhida foi a plataforma .NET (MICROSOFT, 2001;
GALUPPO, 2004; ARAUJO, 2006; MCNEISH, 2002) e o SGBD SQLServer (BATISTTI, 2005;
ELMASRI, 2005). Na figura 3, é apresentada a arquitetura do GISCODE.
Figura 3 – Arquitetura do GISCODE
Através do mapeamento dos dados de aplicações FoxPro (versões 2.5, 2.6, 5.0, 7, 8 e 9), o
GISCODE gera código fonte para linguagem C#, com instruções SQL e mapeamentos para já
definidos para SQLServer.
Nas figuras 4 e 5, apresentam-se o diagrama de pacotes e classes do GISCODE.
Figura 4 – Diagrama de Pacotes
Figura 5 – Diagrama de Classes
Conforme apresentado na figura 5, através do uso do pattern Abstract Factory (GAMMA,
2000), o GISCODE permite acoplar outros tipos de linguagens e bancos de dados para outros tipos
de gerações.
O processo de uso do GISCODE é descrito a seguir:
1) Definir a pasta de origem das tabelas do FoxPro;
2) O usuário do gerador seleciona quais arquivos deverão ser lidos (figura 6);
3) Poderão ser definidos novos nomes para modelo de classes de objeto e modelo de
classes de acesso a dados (figura 7);
4) Os campos da tabela poderão ser configurados (figura 8);
5) O GISCODE cria a estrutura de tabelas para SQLServer, migrando os dados e gerando as
classes do modelo. Estas classes geradas são definidas pelo padrão MVC (figura 9 e
figura 10).
Figura 6 – Protótipo do
GISCODE
Figura 7 – Propriedades da Tabela de Dados
Figura 8 – Propriedades da Tabela - Campos
Figura 9 – Modelo de Classe de Objeto (DTL)
Figura 11 - Estrutura de Diretório gerado pelo GISCODE
Figura 10 – Modelo de Classe de Acesso a Dados
(DAL)
Conforme apresentado na figura 11, o código fonte gerado para o modelo de objetos é
inserido automaticamente na pasta DTL (Data Transfer Layer) e o código fonte gerado para o
modelo de classes de acesso a dados é inserido na pasta DAL (Data Acess Layer).
A pasta BLL (Business Logic Layer) é criada, mas não recebe código fonte do gerador de
código. Após criado o código fonte, o gerador dará possibilidade de visualização dos modelos de
objetos e dos modelos de classes de acesso a dados.
6 Estudo de Caso e Considerações Finais
Neste trabalho, procurou-se apresentar um estudo sobre migração de aplicações legadas, sob
a ótica dos geradores de código.
Como estudo de caso, o GISCODE foi utilizado em um projeto real na empresa CREDMIL
Administradora de Cartões de Crédito, sediada em Porto Alegre.
A CREDMIL possui um sistema administrativo desenvolvido em Visual FoxPro, versão 9.0.
Através do uso do GISCODE, foi possível importar os dados de arquivos .DBF para SQLServer em
questão de minutos, sem a re-digitação das informações. Além da migração, o GISCODE gerou as
camadas de acesso a dados e modelo de objetos, permitindo a integração com outra aplicação
desenvolvida em ASP.NET, para acesso através da Web.
Neste processo de migração conseguiu-se, através do uso da ferramenta, minimizar os
problemas de importação e migração dos dados para um SGBD, além de gerar o código para sua
manipulação em C#.
A criação de um gerador de código traz a vantagem do aumento da produtividade aliado a
uma alta qualidade no desenvolvimento, uma vez que produtos finais são gerados seguindo uma
padronização, facilitando a identificação de erros.
É evidente a importância da manutenção de software e modernização no ciclo de vida do
produto de software, pois as aplicações hoje existentes, um dia serão sistemas legados. Neste
contexto, o gerador de código minimiza o trabalho dos desenvolvedores pela adoção de padrões
para futuras aplicações a serem desenvolvidas.
Ainda se pretende, como extensão deste trabalho, analisar o uso de tecnologias como
XML/XSLT como alternativa ao pattern Abstract Factory existente, transformando o GISCODE
em um produto que suporte várias linguagens de programação e gerenciadores de banco de dados.
Agradecimentos
Os autores agradecem o apoio da empresa INFO SAFE Informática LTDA, (empresa que
usou o GISCODE na empresa cliente), a CREDMIL, que serviu de estudo de caso e, finalmente, a
FACENSA – Faculdade Cenecista Nossa Senhora dos Anjos.
Referências
ARAUJO, Anderson Viçoso de. Treinamento Avançado em .NET. 1ª Edição, São Paulo: Digerati Books, 2006.
BATTISTI, Julio. SQL Server 2005 Administração e Desenvolvimento - Curso Completo. Rio de Janeiro: Axcel Books do Brasil,
2005.
CODEGENERATION. The code generation network. Disponível em: <http://www.codegeneration.net>. Consultado em Março de
2009.
CODEPROJECT. NHibernate Helper Kit. Disponível em: <http://www.codeproject.com/KB/dotnet/NHibernate_Helper_Kit.aspx>.
Consultado em Junho de 2009.
CODESMITH. The best .NET, C#, VB, SQL and more template based source code generator tool. Disponível em:
<http://www.codesmithtools.com/>. Consultado em Junho de 2009.
COSTA, Ricardo Peralva. Visual FoxPro 5.0: Guia de Desenvolvimento. São Paulo: Érica, 1998.
ELMASRI, Ramez. Sistemas de Banco de Dados. São Paulo: Pearson Addison Wesley, 2005.
FRANCA, Luiz Paulo Alves – STAA, Arndt Von. Uma Arquitetura Aberta para geradores de Artefatos. Disponível em:
<http://www.lbd.dcc.ufmg:8080/colecoes/sbes/2002/001.pdf>. Consultado em março de 2009.
FONTANETTE, Valdirene; PRADO, Antonio; OLIVEIRA, Andre Luis. Uma Abordagem para Migração Gradativa de Aplicações
Legadas. In: SBES - Simpósio Brasileiro de Engenharia de Software, 2004.
FOWLER, Martin. Padrões de Arquitetura de Aplicações Corporativas. Porto Alegre: Bookman, 2006.
GALUPPO, Fabio Matheus, Vanclei e SANTOS Wallace, Desenvolvendo com C#. Editora Bookman 2004.
GAMMA, Erich. HELM, Richard. JOHNSON, Ralph, VLISSIDES, John. Padrões de Projeto – Soluções reutilizáveis de Software
Orientado a Objetos. Bookman, 2000.
HEUVEL, Willem-Jan van den. Aligning modern business processes and legacy systems: A component-based perspective.
Massachusetts Institute of Technology, 2007.
LARMAN, Craig, Utilizando UML e Padrões: uma introdução à análise e ao projeto orientado a objetos. 3ª edição, Porto Alegre:
Bookman, 2007.
LONG, Jeb. FoxPro 2.5 for Windows Guia do Programador. Rio de Janeiro: Berkeley, 1993.
MAIA, Marcelo; OLIVEIRA, Ademir. JPearl – Uma Linguagem para Descrição de Reestruturações em Programas Java. In: SBPL Simpósio Brasileiro de Linguagens de Programação, 2002.
MARTIN, James. Princípios de Análise e projeto baseados em objetos. Rio de Janeiro: Campus, 1997.
MARTIN, James; McCLURE, Carma. Técnicas Estruturadas e CASE. São Paulo: Makron Books, 1991.
MCNEISH, Kevin. .NET for Visual FoxPro Developers. Hentzenwerke Publishing, 2002.
Microsoft Corporation. Microsoft C# Segredos da Linguagem/Microsoft Corporation. Rio de Janeiro: Campus, 2001
MYGENERATION. MyGeneration – Code Generation and OR Mapping. Disponível em:
<http://www.mygenerationsoftware.com/portal/default.aspx>. Consultado em Junho de 2009.
O’ BRIEN, James A. Sistemas de informação e as decisões gerenciais na era da Internet. 2ª ed. São Paulo: Saraiva, 2006.
SANTOS, Edgar. CodeCharge: Gerador de Códigos para Aplicações Web. Campinas: UNICAMP, 2002.
SEACORD, Robert C.; PLAKOSH, Daniel; LEWIS, Grace A. Modernizing Legacy Systems: Software Technologies, Engineering
Processes, and Business Practices. Addison Wesley, 2003.
SEBESTA, Robert W. Conceitos de Linguagens de Programação. 4ª ed. Porto Alegre: Bookman, 2000.
SIEGEL, Charles. Dominando o FoxPro 2.5 for Windows e DOS. São Paulo: Editora Makron Books, 1994.
SILVA, Antonio F. Bernardo da; SILVA, Marcelo R. Bernardo da; SILVA, Mauricio R. Bernardo da. Desenvolvendo com Microsoft
Visual FoxPro 6. Rio de Janeiro: Book Express, 2000.
SOFTWAREMINING. Breathing life into legacy applications. Disponível em: <http://www.softwaremining.com/index.jsp>.
Consultado em Maio de 2009.
SOMMERVILLE, Ian. Engenharia de Software. São Paulo: Addison Wesley, 2003.
SWEBOK. Guide to the Software Engineering Body of Knowledge. IEEE: Computer Society, 2004. Disponível em:
<http://www2.computer.org/portal/web/swebok/htmlformat>. Consultado em Maio de 2009.
VAZQUEZ, Fábio. Visual FoxPro 8 para Desenvolvedores: Prefácio de Les Pinter. Rio de Janeiro: Axcel Books do Brasil, 2003.
Download

estudo e implementação de um gerador de código para migração