SlideShare une entreprise Scribd logo
1  sur  34
José Araújo 
Migrando ~4 milhões de linhas de 
código de Delphi 7 > XE7
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;
Um pouco de história 
• Clipper; 
• Delphi 1; 
• BDE; 
• Mesmos programadores; 
• Conceito RAD; 
• 15 anos de legado; 
• +50 programadores/analistas;
Motivação 
• Delphi 7 obsoleto; 
• Problemas com link edição; 
• Se livrar do BDE; 
• Colaboradores insatisfeitos; 
• Embarcadero (Delphi – O Retorno); 
• AlphaControls(Projeto Botox);
Dificuldades 
• Muitos usuários(+40 mil); 
• Backlog, bugs; 
• Muitas pessoas envolvidas; 
• GP’$; 
• Vendedore$; 
• Diretore$;
1ª reunião 
• GP’s, Vendedores, Diretores e Programadores; 
• Todos na mesma sala;
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 $;
3ª reunião 
• GP’s, Vendedores, Diretores e Programadores; 
• Todos na mesma sala;
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;
Vamos começar
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;
Analisando valores 
• Delphi 7 x Delphi XE; 
• BDE x DBXpress; 
• Morro(MOnitor de eRROs); 
• Maiores queixas dos clientes; 
• Problemas com blobs; 
• MaxFileHandle;
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;
Conversor 
• Próprio; 
• reFind; 
• Programações “criativas”; 
• *.dfm; 
• *.pas; 
• Protótipos; 
• Passos pequenos;
Exemplos 
• TDataBase > TDLServerConnection; 
• SessionName: Morreu; 
• ServerAddress: Morreu; 
• DataBaseName > ConnectionName; 
• DataBaseFile > DataBaseURL; 
• TQuery > TDLQuery; 
• TDataSource > TDLDataSource; 
• Uses: DLDataSet, DLConnections; 
• DB, 
• DB;
Técnica 
• DevOps (Blue/Green); 
• Rollback rápido; 
Sistema 
Router 
(Conversor) 
BDE 
DLib2 DBXpress
Implantação 
• Delphi 7 ainda; 
• Homologamos internamente; 
• Programa Beta; 
• Nossos Representantes(Filiais); 
• Servidor de Deploy gera 2 pacotes;
Técnica
Técnica 
• Implantação “Canário” (Teste em Produção); 
• DevOps; 
• Sinalizador; 
Usuários 
Router 
(Implantadores) 
BDE 
DLib2 DBXpress 
95% 
5%
BDE Adeus! 
1800 AC – 2013 DC
Delphi XE? 
• Volta as atenções; 
• Ânimo da equipe; 
• Vamos para o XE; 
• Investimento “Alto”;
Delphi 7 > XE7 
• Benefícios; 
• Linguagem; 
• 64 bits; 
• FireDAC; 
• VCL Style;
Técnica 
• Arquitetura de convivência; 
• Não atrapalhar a produção; 
• Mudança paralela; 
• Diretivas de compilação;
Exemplos 
uses 
{$IF CompilerVersion = cvDelphiXE7} 
DBXCommon, 
{$ELSE} 
DBXpress, 
{$IFEND}
Exemplos 
const 
cvDelphiXE = 22; //VER220 
cvDelphiXE2 = 23; //VER230 
cvDelphiXE3 = 24; //VER240 
cvDelphiXE4 = 25; //VER250 
cvDelphiXE5 = 26; //VER260 
cvDelphiXE6 = 27; //VER270 
cvDelphiXE7 = 28; //VER280
Exemplos 
{$IF CompilerVersion = cvDelphiXE7} 
function TDLQuery.GetRecord(Buffer: TRecBuf; ...): TGetResult; 
{$ELSE} 
function TDLQuery.GetRecord(Buffer: PChar; ...): TGetResult; 
{$IFEND} 
begin 
try 
Result := inherited GetRecord(Buffer, GetMode, DoCheck); 
except 
on e: Exception do 
raise Exception.Create(...); 
end; 
end;
Exemplos 
{$IF CompilerVersion = cvDelphiXE7} 
procedure OnDocumentComplete(ASender: TObject; const pDisp: 
IDispatch; const URL: OleVariant); 
{$ELSE} 
procedure OnDocumentComplete(Sender: TObject; const pDisp: 
IDispatch; var URL: OleVariant); 
{$IFEND}
O Exemplo 
unit DelphiUp; 
interface 
const 
{$IF CompilerVersion = cvDelphiXE7} 
EmptyBookmark = nil; 
{$ELSE} 
EmptyBookmark = ''; 
{$IFEND} 
type 
{$IF CompilerVersion = cvDelphi7} 
TBookmark = string; 
{$IFEND}
Migração Total 
• Sim! Analisamos;
Segurança
Segurança...
Segurança... 
• Testes automatizados; 
• Código versionado; 
• Testes humanos; 
• Passos pequenos; 
• Teste Complete; 
• DUnit; 
• Protótipos;
joseafilho@gmail.com 
@cengenharia 
centraldaengenharia.wordpress.com

Contenu connexe

En vedette

Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Diego Rosa
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015Guinther Pauli
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
Software de gestão para indústrias de confecção
Software de gestão para indústrias de confecçãoSoftware de gestão para indústrias de confecção
Software de gestão para indústrias de confecçãoInfosoft Sistemas Ltda
 
Aitana Launch - Seattle Overview - Português (br)
Aitana Launch - Seattle Overview - Português (br)Aitana Launch - Seattle Overview - Português (br)
Aitana Launch - Seattle Overview - Português (br)Fernando Rizzato
 
Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Fernando Rizzato
 

En vedette (9)

Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Firebird
FirebirdFirebird
Firebird
 
Software de gestão para indústrias de confecção
Software de gestão para indústrias de confecçãoSoftware de gestão para indústrias de confecção
Software de gestão para indústrias de confecção
 
Aitana Launch - Seattle Overview - Português (br)
Aitana Launch - Seattle Overview - Português (br)Aitana Launch - Seattle Overview - Português (br)
Aitana Launch - Seattle Overview - Português (br)
 
Apostila winthor básico
Apostila winthor básicoApostila winthor básico
Apostila winthor básico
 
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGOEVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
 
Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7
 

Similaire à Migrando 4 milhões de linhas de Delphi 7 para XE7

Fortes Papo Developer
Fortes Papo DeveloperFortes Papo Developer
Fortes Papo DeveloperJosé Araújo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksDo Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksPablo Dall'Oglio
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalEduardo Bregaida
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiMario Guedes
 
ORM - TDC Porto Alegre 2014 Trilha .NET
ORM - TDC Porto Alegre 2014 Trilha .NETORM - TDC Porto Alegre 2014 Trilha .NET
ORM - TDC Porto Alegre 2014 Trilha .NETJorge Maia
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 Eduardo Bregaida
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMWEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMFernando Rizzato
 

Similaire à Migrando 4 milhões de linhas de Delphi 7 para XE7 (20)

Fortes Papo Developer
Fortes Papo DeveloperFortes Papo Developer
Fortes Papo Developer
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksDo Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
 
ORM - TDC Porto Alegre 2014 Trilha .NET
ORM - TDC Porto Alegre 2014 Trilha .NETORM - TDC Porto Alegre 2014 Trilha .NET
ORM - TDC Porto Alegre 2014 Trilha .NET
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 
Linguagem Delphi-Introdução
Linguagem Delphi-IntroduçãoLinguagem Delphi-Introdução
Linguagem Delphi-Introdução
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIMWEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
WEBINAR DE LANÇAMENTO DELPHI, C++ BUILDER E RAD STUDIO 10.1 BERLIM
 

Plus de José Araújo

Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosJosé Araújo
 
Curso de Delphi - Linguagem Pascal
Curso de Delphi - Linguagem PascalCurso de Delphi - Linguagem Pascal
Curso de Delphi - Linguagem PascalJosé Araújo
 
Curso de Delphi - Lógica de Programação 3
Curso de Delphi - Lógica de Programação 3Curso de Delphi - Lógica de Programação 3
Curso de Delphi - Lógica de Programação 3José Araújo
 
Curso de Delphi - Lógica de Programação 2
Curso de Delphi - Lógica de Programação 2Curso de Delphi - Lógica de Programação 2
Curso de Delphi - Lógica de Programação 2José Araújo
 
Curso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de ProgramacaoCurso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de ProgramacaoJosé Araújo
 
XPCE - Qualidade no Código
XPCE - Qualidade no CódigoXPCE - Qualidade no Código
XPCE - Qualidade no CódigoJosé Araújo
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de DadosJosé Araújo
 
Delphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no CódigoDelphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no CódigoJosé Araújo
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaJosé Araújo
 

Plus de José Araújo (9)

Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de Dados
 
Curso de Delphi - Linguagem Pascal
Curso de Delphi - Linguagem PascalCurso de Delphi - Linguagem Pascal
Curso de Delphi - Linguagem Pascal
 
Curso de Delphi - Lógica de Programação 3
Curso de Delphi - Lógica de Programação 3Curso de Delphi - Lógica de Programação 3
Curso de Delphi - Lógica de Programação 3
 
Curso de Delphi - Lógica de Programação 2
Curso de Delphi - Lógica de Programação 2Curso de Delphi - Lógica de Programação 2
Curso de Delphi - Lógica de Programação 2
 
Curso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de ProgramacaoCurso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de Programacao
 
XPCE - Qualidade no Código
XPCE - Qualidade no CódigoXPCE - Qualidade no Código
XPCE - Qualidade no Código
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
 
Delphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no CódigoDelphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no Código
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração Contínua
 

Dernier

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 

Dernier (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Migrando 4 milhões de linhas de Delphi 7 para XE7

  • 1.
  • 2. José Araújo Migrando ~4 milhões de linhas de código de Delphi 7 > XE7
  • 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;
  • 15. Conversor • Próprio; • reFind; • Programações “criativas”; • *.dfm; • *.pas; • Protótipos; • Passos pequenos;
  • 16. Exemplos • TDataBase > TDLServerConnection; • SessionName: Morreu; • ServerAddress: Morreu; • DataBaseName > ConnectionName; • DataBaseFile > DataBaseURL; • TQuery > TDLQuery; • TDataSource > TDLDataSource; • Uses: DLDataSet, DLConnections; • DB, • DB;
  • 17. Técnica • DevOps (Blue/Green); • Rollback rápido; Sistema Router (Conversor) BDE DLib2 DBXpress
  • 18. Implantação • Delphi 7 ainda; • Homologamos internamente; • Programa Beta; • Nossos Representantes(Filiais); • Servidor de Deploy gera 2 pacotes;
  • 20. Técnica • Implantação “Canário” (Teste em Produção); • DevOps; • Sinalizador; Usuários Router (Implantadores) BDE DLib2 DBXpress 95% 5%
  • 21. BDE Adeus! 1800 AC – 2013 DC
  • 22. Delphi XE? • Volta as atenções; • Ânimo da equipe; • Vamos para o XE; • Investimento “Alto”;
  • 23. Delphi 7 > XE7 • Benefícios; • Linguagem; • 64 bits; • FireDAC; • VCL Style;
  • 24. Técnica • Arquitetura de convivência; • Não atrapalhar a produção; • Mudança paralela; • Diretivas de compilação;
  • 25. Exemplos uses {$IF CompilerVersion = cvDelphiXE7} DBXCommon, {$ELSE} DBXpress, {$IFEND}
  • 26. Exemplos const cvDelphiXE = 22; //VER220 cvDelphiXE2 = 23; //VER230 cvDelphiXE3 = 24; //VER240 cvDelphiXE4 = 25; //VER250 cvDelphiXE5 = 26; //VER260 cvDelphiXE6 = 27; //VER270 cvDelphiXE7 = 28; //VER280
  • 27. Exemplos {$IF CompilerVersion = cvDelphiXE7} function TDLQuery.GetRecord(Buffer: TRecBuf; ...): TGetResult; {$ELSE} function TDLQuery.GetRecord(Buffer: PChar; ...): TGetResult; {$IFEND} begin try Result := inherited GetRecord(Buffer, GetMode, DoCheck); except on e: Exception do raise Exception.Create(...); end; end;
  • 28. Exemplos {$IF CompilerVersion = cvDelphiXE7} procedure OnDocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); {$ELSE} procedure OnDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); {$IFEND}
  • 29. O Exemplo unit DelphiUp; interface const {$IF CompilerVersion = cvDelphiXE7} EmptyBookmark = nil; {$ELSE} EmptyBookmark = ''; {$IFEND} type {$IF CompilerVersion = cvDelphi7} TBookmark = string; {$IFEND}
  • 30. Migração Total • Sim! Analisamos;
  • 33. Segurança... • Testes automatizados; • Código versionado; • Testes humanos; • Passos pequenos; • Teste Complete; • DUnit; • Protótipos;

Notes de l'éditeur

  1. [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;
  2. [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;
  3. [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;
  4. [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;
  5. -Nós empolgadissímos; -Figura de animção!!! -Não conseguimos chegar a lugar nenhum; -Reagrupar e traçar nova estrátegia;
  6. -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);
  7. Após falar com todos separados; Alinhar todos;
  8. [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;
  9. [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;
  10. [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;
  11. [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]
  12. [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;
  13. [Removendo] -Replaces especificos dentro do código para remover o que não era mais necessário;
  14. [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;
  15. [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;
  16. [Implantar nos demais clientes] [Mineiros] -Gases tóxicos; -Canários morriam primeiro;
  17. [Canário] -Forma de poder testar em produção; -Impacto controlado; -Reverter a situação rapidamente; -Caption do Form tinha DLib2;
  18. [Comemoração] -Fomos recompensados; -Festa total; -Só alegria; -E agora?
  19. [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;
  20. [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;
  21. [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;
  22. [DBXpress] -Dentro da nossa biblioteca; -cvDelphiXE7 unit chamada DLCompilerConts tem todas as versões de compiladores; -Maior legibilidade;
  23. Unit DLCompilerConsts;
  24. -Override do ClientDataSet;
  25. -Handle para o evento OnDocumentComplete do TWebBrowser; -De VAR para CONST; -Até aqui erros de compilação; -Casos isolados;
  26. -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;
  27. [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;
  28. [Golden Gates]
  29. [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.
  30. [Protótipo] Maneira barata de viabilizar algo; Acredite, começe;