ESTUDO E IMPLEMENTAÇÃO DE UM GERADOR DE CÓDIGO PARA MIGRAÇÃO DE APLICAÇÕES LEGADAS



Documentos relacionados
Ciência da Computação ENGENHARIA DE SOFTWARE. Análise dos Requisitos de Software

Prof. Marcelo Machado Cunha

APOO Análise e Projeto Orientado a Objetos. Requisitos

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Palavras-Chaves: Arquitetura, Modelagem Orientada a Objetos, UML.

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados.

DATA WAREHOUSE NO APOIO À TOMADA DE DECISÕES

ADMINISTRAÇÃO DE SISTEMAS DE INFORMAÇÃO (AULA 03)

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br

ISO/IEC 12207: Gerência de Configuração

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Projeto Disciplinar de Infra-Estrutura de Software SILC - SISTEMA DE LOCAÇÃO E CONTROLE

Planejando o aplicativo

SISTEMA GERENCIADOR DE BANCO DE DADOS

Projeto de Sistemas I

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Análise e Projeto Orientados por Objetos

Módulo 4: Gerenciamento de Dados

Engenharia de Requisitos

Banco de Dados I Introdução

LINGUAGEM DE BANCO DE DADOS

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

BANCO DE DADOS AULA 02 INTRODUÇÃO AOS BANCOS DE DADOS PROF. FELIPE TÚLIO DE CASTRO 2015

O modelo unificado de processo. O Rational Unified Process, RUP.

Table 1. Dados do trabalho

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc.

SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS

Termo de Abertura Sistema de Vendas de Pizzas Online (PizzaWeb) - Versão 1.0

Modernização e Evolução do Acervo de Software. Gustavo Robichez de Carvalho guga@les.inf.puc-rio.br

Sistema Gerenciador de Conteúdo OpenCms: um caso de sucesso no CEFET-MG

PIM. CST em Análise e Desenvolvimento de Sistemas. Projeto Integrado Multidisciplinar. 4º/3º Períodos 2010/2 UNIVERSIDADE PAULISTA CURSO

Requisitos de Software. Teresa Maciel DEINFO/UFRPE

UM FRAMEWORK PARA DESENVOLVIMENTO DE

Sistemas de Informação I

Engenharia de Software III

Engenharia de Requisitos Estudo de Caso

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Projeto Disciplinar de Infra-Estrutura de Software SISPA FACULDADE SENAC

José Benedito Lopes Junior ¹, Marcello Erick Bonfim 2

Figura 1 - Arquitetura multi-camadas do SIE

Introdução Banco de Dados

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl

Manual do Visualizador NF e KEY BEST

GERADOR DE CÓDIGO JSP BASEADO EM PROJETO DE SGBD. Acadêmico: Maicon Klug Orientadora: Joyce Martins

UML - Unified Modeling Language

Introdução. Banco de dados. Por que usar BD? Por que estudar BD? Exemplo de um BD. Conceitos básicos

UNIVERSIDADE FEDERAL DO PARANÁ. CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o.

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc.

CURSO: Tecnologia em Análise e Desenvolvimento de Sistemas SÉRIE: 3º Semestre TURNO: Noturno DISCIPLINA: ANÁLISE DE SISTEMAS ORIENTADA A OBJETOS

GUIA DE CURSO. Tecnologia em Sistemas de Informação. Tecnologia em Desenvolvimento Web. Tecnologia em Análise e Desenvolvimento de Sistemas

GERÊNCIA DE INTEGRAÇÃO DO PROJETO

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Banco de Dados. CursoTécnico em Informática Modalidade Integrado. Professora Michelle Nery. Instituto Federal do Sul de Minas, câmpus Pouso Alegre

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

I. Dados Identificadores Tecnologia em Análise e Desenvolvimento de Sistemas

Palavras-chave: i3geo, gvsig, Mapserver, integração, plugin. Contato: ou

Introdução a UML. Hélder Antero Amaral Nunes haanunes@gmail.com

Banco de Dados I. Quantidade de informação gerada em um dia. Aula milhões de clientes ativos; Mais de 42 terabytes de dados; Salários na área

Gerenciador de Log Documento Visão. Versão 2.0

Conceitos de Banco de Dados

Análise e Projeto Orientados por Objetos

Manual de Instalação, Administração e Uso do Sistema Elétric

Engenharia de Domínio baseada na Reengenharia de Sistemas Legados

TRABALHO DE CONCLUSÃO DE CURSO: ANTEPROJETO

DESENVOLVIMENTO DE SOFTWARE DE VOTAÇÃO WEB UTILIZANDO TECNOLOGIA TOUCHSCREEN

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Wilson Moraes Góes. Novatec

Proposta de Implantação do Software MULTIACERVO no Arquivo do DEINFRA

FERRAMENTA WEB PARA MODELAGEM LÓGICA EM PROJETOS DE BANCOS DE DADOS RELACIONAIS

Faculdade Pitágoras. Engenharia de Software. Prof.: Julio Cesar da Silva.

Dadas a base e a altura de um triangulo, determinar sua área.

PLANO DE TREINAMENTO

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Gerenciamento de Problemas

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

REQUISITOS. Prof. Msc. Hélio Esperidião

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira

IntroduçãoaoGuia SWEBOK. Ernani Lopes Isensee 2014

Agenda. A Empresa História Visão Conceito dos produtos

SQL APOSTILA INTRODUÇÃO A LINGUAGEM SQL

REPROJETO DA ORGANIZAÇÃO COM SISTEMAS DE INFORMAÇÃO

Governança de TI. ITIL v.2&3. parte 1

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Sistemas de Produtividade

Disciplina de Banco de Dados Introdução

REFORÇO DE PROGRAMAÇÃO ESTRUTURADA EM LINGUAGEM C PARA GRADUAÇÃO EM ENGENHARIA ELÉTRICA

Noções de. Microsoft SQL Server. Microsoft SQL Server

Arquitecturas de Software Licenciatura em Engenharia Informática e de Computadores

08/04/2013. Agenda. O Sistema CACHÉ. O Sistema CACHÉ. O Sistema CACHÉ. O Sistema CACHÉ

AGILE ROLAP - UMA METODOLOGIA ÁGIL PARA IMPLEMENTAÇÃO DE AMBIENTES DE NEGÓCIOS BASEADO EM SERVIDORES OLAP.

Transcrição:

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.