O documento descreve a migração de aproximadamente 4 milhões de linhas de código de Delphi 7 para Delphi XE7 por uma empresa de software. A migração foi motivada pela obsolescência do Delphi 7 e problemas com o BDE. A estratégia envolveu reuniões com as partes interessadas, criação de bibliotecas para abstrair camadas, conversores automatizados e testes para garantir a segurança durante o processo gradual de migração.
3. Quem?
• 9 anos na área de desenvolvimento;
• Fortes Informática(Fortes Report);
• Delphi Developer Certification;
• Embarcadero Conference 2011, 2012;
• Sócio da Startup Top Sistemas;
4. Um pouco de história
• Clipper;
• Delphi 1;
• BDE;
• Mesmos programadores;
• Conceito RAD;
• 15 anos de legado;
• +50 programadores/analistas;
5. Motivação
• Delphi 7 obsoleto;
• Problemas com link edição;
• Se livrar do BDE;
• Colaboradores insatisfeitos;
• Embarcadero (Delphi – O Retorno);
• AlphaControls(Projeto Botox);
6. Dificuldades
• Muitos usuários(+40 mil);
• Backlog, bugs;
• Muitas pessoas envolvidas;
• GP’$;
• Vendedore$;
• Diretore$;
7. 1ª reunião
• GP’s, Vendedores, Diretores e Programadores;
• Todos na mesma sala;
8. 2ª reunião
• Reuniões separadas primeiro;
• GP’s, Vendedores, Diretores;
• Estratégia para cada grupo;
• GP’s: Entregar mais tarefas;
• Vendedores: Sistema mais rico;
• Diretores: Maior retorno $;
9. 3ª reunião
• GP’s, Vendedores, Diretores e Programadores;
• Todos na mesma sala;
10. Recursos
• Pessoas para executar;
• 1 membro de cada equipe;
• Algumas horas por dia;
• Equipe PeD (Pesquisa e Desenvolvimento);
• Buscar novos conhecimento;
• Resolver impedimentos do setor;
12. Cenário
• 9 sistemas;
• 9 segmentos diferentes;
• ~4 milhões de linhas;
• Firebird e SQLServer;
• Delphi 7 (12 anos);
• BDE (Era o que tinha);
• Poucos componentes de terceiros;
13. Analisando valores
• Delphi 7 x Delphi XE;
• BDE x DBXpress;
• Morro(MOnitor de eRROs);
• Maiores queixas dos clientes;
• Problemas com blobs;
• MaxFileHandle;
14. DLib2
• BDE <> DBXpress(Totalmente);
• E se amanhã mudar denovo;
• Design Pattern Strategy;
• Wrapper(Empacotador);
• Mínimo de impacto nos sistemas;
• Reduzir tempo de conversão;
[9 anos]
Dedicados: Delphi, Java, Android e Engenharia de Software;
[Fortes]
5 anos, Programador nos sistemas finais, Analista na equipe PeD;
[EC 2011]
-Criando um servidor de integração contínua na prática;
[EC 2012]
-Melhorando a qualidade do código através de métricas;
-Material se encontra na revista Active Delphi e Blog;
[TopSistemas]
-Menos de 1 ano, Automação, HTTP;
[Clipper]
Fortes, Sistemas Contábeis; Paradox
Depois de vários anos apareceu Delphi 1;
Delphi sistemas intuitivos e produtividade;
Começou utilizando a forma RAD de ser;
[Delphi 7]
-12 anos, editor defasado, linguagem obsoleta;
-Ferramenta atualizada XE;
[Link edição]
-Sistema muito grande, vários problemas diários durante as compilações;
-Dica muito boa: Trocar dll Link32 do D7 pela do XE;
[Colaboradores]
-Recursos .Net, Java, Estudando outras ferramentas.
-Criar frameworks e a linguagem não da suporte;
[AlphaControls]
-Tentativa de deixar nossos sistemas mais atraentes;
-Criar uma identidade visual para nossos sistemas;
-Padronizar;
[Pessoas]
-Principal dificuldade foi pessoas;
-GP’s, Vendedores, Diretores
-Cada produto tem seu próprio eco-sistema;
-Todos com prioridades diferentes;
-Visões diferentes;
-Na nossa analise não teríamos problema com tecnologia;
-Nem com mão de obra;
-Nós empolgadissímos;
-Figura de animção!!!
-Não conseguimos chegar a lugar nenhum;
-Reagrupar e traçar nova estrátegia;
-Para cada grupo usamos estratégias diferentes;
--GP’s(Programadores iriam realizar as tarefas de forma mais eficaz);
--Vendedores(Sistema iria ficar mais Rico, logo iriam vender mais,
GPs iriam entregar mais tarefas);
--Diretores(Vendedores iriam vender mais, GP’s iriam entregar mais Logo Mais grana);
Após falar com todos separados;
Alinhar todos;
[Peraí, precisamos de gente pra fazer]
Selecionar candidatos para executar;
1 Membro de cada equipe trabalhando algumas horas por dia;
Não deu certo, tinha dia que a equipe não libera a pessoa;
Quando liberava tinha muitas interrupções;
Suporte;
Estava andando muito lento;
Tivemos outra reunião e acabamos criando a Equipe PeD;
Nesse ponto, todos já estavam empolgados pelos resultados;
As reuniões já eram mais animadoras;
[Sistemas]
-AC(Contábil, Fiscal, Pessoal) > +1,5 milhões de linhas;
-Ponto, Gestão(Financeiro, Estoque), Cargas, Frotas;
-Dlib: biblioteca própria para encapsular particularidades, reduzir escrita de código;
[Componentes]
-DevExpress(Quantum Grid);
-AlphaControls(Skins);
-SQLMemTable(Tabela em memória);
-madException(Captura de Runtime Erros - Morro);
[Compilacoes]
-Existem alguns sistemas compilando em XE;
-Deploy em Delphi 7;
[Escolher]
-Entre D7 e XE;
-BDE e DBXpress;
[Morro]
-Ferramenta para coletas de erros;
-Enviar do windows e de várias empresas;
-Por sistema;
-Envia a CallStack, Print da tela atual(Não do desktop inteiro);
[Blobs]
-Nossos sistemas tem muitos blobs;
[Decisão]
-Se livrar do BDE primeiro;
-Agrega mais valor ao cliente final;
[DLib1]
-Herdando diretamente do BDE;
-Estruturas totalmente diferentes entre BDE e DBXpress;
-Esforço gigante para migrar;
-Maior tempo de testar;
[DLib2]
-Estrutura de acesso banco de dados partindo do ZERO;
-Não reescrevemos a tecnologia de acesso a dados;
-Encapsulamos o tipo de tecnologia utilizada;
-Strategy Wiki: O padrão Strategy permite definir novas operações sem alterar as classes dos elementos sobre os quais opera.
Este padrão permite que o algoritmo possa variar independentemente dos clientes que o utilizam.
-Mantemos a compatibilidade com os recursos utilizados nos sistemas;
-Insert, Edit, IndexFields, RecordCount...
-Trouxemos o problema para dentro da nossa biblioteca;
-Protegemos os sistemas;
[ABRIR UML JPG]
[Próprio]
-Na nossa época não existia nenhum tipo de utilitário oficial da Embarcadero;
-Começamos devagar, bem inocente, ReplaceAll, Deu nem para o começo;
-Maioria do código esta padronizado, porém existe muita criatividade espalhada;
-Em alguns casos, foi até uma oportunidade de refatorar o código;
[DFM]
-Classe Métodos(Substituir o componente inteiro, Adicionar, Substituir e Remover Propriedades);
-DFMs Binários;
-Até que foi tranquilo, existe um padrão;
[PAS]
-Tentamos comecar igual ao DFM, não existe um padrão;
-Para cada parte do pas fizemos um método virtual;
-Uses, Interface, Implementation;
-Cada equipe implementa as particularidades dos seus sistemas;
[Removendo]
-Replaces especificos dentro do código para remover o que não era mais necessário;
[DLib2]
-Branch da DLib1;
-Trabalhar sem afetar a linha principal de desenvolvimento;
-Podemos acompanhar todas as mudanças feitas na DLib1;
[Router]
-Técnica para Internet;
-Quando precisava testar, era só converter;
-Nada de mudar o principal;
-Cópia com todas as modificações;
-Fontes2;
[Representantes]
-Retorno de cara na performance e estabilidade;
-Filiais não queriam mais utilizar a DLib1(BDE);
-Empolgação total;
-Filiais queriam implantar nos seus clientes;
-Controlamos os ânimos e agimos com a realidade;
[Implantar nos demais clientes]
[Mineiros]
-Gases tóxicos;
-Canários morriam primeiro;
[Canário]
-Forma de poder testar em produção;
-Impacto controlado;
-Reverter a situação rapidamente;
-Caption do Form tinha DLib2;
[XE]
-Porque?
-Com a DLib2 acabamos esquecendo os companheiros;
-Colaboradores: Empresa estava muito preocupada com o animo da equipe;
-Até o momento só tinhamos agradado os Clientes, Vendedores, GPs e Gerentes;
-Animo da equipe foi FUNDAMENTAL para reforçar a ida para o XE;
-Nunca vi o setor tão empolgado quando nós anunciamos que iríamos para XE;
[Investimento]
-Cara, você vive disso;
-Maior poder perante a Embarcadero;
-Com que moral você vai cobrar a empresa se usa uma versão pirata;
-Se por no lugar do outro, Se alguém piratear seu software?
-Uma hora o cerco vai fechar;
-Estamos na era das validações de licença ser online;
-Vida longa a nossa ferramenta de trabalho;
[XE]
-Retornos imediatos;
-Maior de todos: Colaboradores;
-Linguagem tem recursos modernos como jamais teve antes;
-Generics, Metodos anonimos, RTTI muito robusta, modificadores de acesso(Strict, Final, Abstract Class);
-Class Helpers;
-Estabilidade;
-Gerenciamento de memória;
-Milhares de melhorias, não dúvidas sobre isso;
-Não ver somente o mobile como melhorias, existes várias outras;
-Lógico que a Embarcadero irá dar enfase ao mobile;
[Convivencia]
-Desafio: Migrar para a nova plataforma sem engasgar a do negócio;
-Diferente da DLib, teríamos que mexer no código fonte das equipes;
-Maioria das alterações ocorreu dentro da nossa biblioteca;
-Diretivas não impactam funcionalmente no funcionamento da outra plataforma;
[Passo a Passo]
-Usamos pouco o conversor;
-Afinal de contas é código Delphi, a linguagem não mudou;
-Preferimos analisar caso a caso;
-Já tinhamos toda a carga de experiencia de conversão do BDE;
[DBXpress]
-Dentro da nossa biblioteca;
-cvDelphiXE7 unit chamada DLCompilerConts tem todas as versões de compiladores;
-Maior legibilidade;
Unit DLCompilerConsts;
-Override do ClientDataSet;
-Handle para o evento OnDocumentComplete do TWebBrowser;
-De VAR para CONST;
-Até aqui erros de compilação;
-Casos isolados;
-Bookmark no delphi 7 é um tipo primitivo;
-No XE é um tipo complexo;
-Usavamos aos milhares no Delphi7 bookmark como string;
-Substituir os bookmark para Tbookmark;
-Basta declarar a DelphiUP na uses;
[Migração]
-Já haviamos analisado várias vezes a possibilidade;
-Por baixo de 5 a 7 anos;
-Detalhe: Esses 5 a 7 anos é na unidade de medida Programador!
-Nossa conclusão – IMAGEM;
-Não é impossível, mais....;
-Todos falam em WEB, alguém em sã conciência acredita mesmo que o Desktop vai morrer duma hora pra outra;
-Estruture seu sistema para rodar na sobre HTTP e seja feliz;
-Roda em todo lugar. Existem quantos mercantis ou bares que tem um MAC ou Linux no caixa!
-No final das contas tudo se resume em MAIS DO MESMO;
[Golden Gates]
[Golden Gates]
Em média, na época, uma fatalidade foi registrada, por cada milhão de dólares gastos em um projeto dessa magnitude. Mas o engenheiro chefe da ponte, Joseph Strauss, cerca de vinte milhões de dólares gastos para a construção não deve ser sinônimo de vinte mortes entre seus funcionários.
[Protótipo]
Maneira barata de viabilizar algo;
Acredite, começe;