SlideShare une entreprise Scribd logo
1  sur  45
Desconstruindo
Monolitos
Como construir micro serviços Delphi
com agilidade e qualidade
Hello World!! ✋
Felipe Caputo
Desenvolvedor sênior e líder técnico na
Softplan, atualmente sou responsável
pelo desenvolvimento de soluções para
integração entre aplicações dos órgãos
da justiça no País.
May Fernandes
Analista de Testes com mais de 08 anos
de experiência com testes de aplicações
desktop e micro-serviços. Atualmente
trabalho com processos de automação
de testes e QAOps na Softplan.
Softplan
▸ Principais sistemas em Delphi com mais de 20
anos
▸ Milhares de usuários e milhões de linhas de
código
▸ Dezenas de versões
▸ Diversas integrações
▸ Evolução para plataforma
▸ Integração com outras linguagens
Agenda
▸ Monolitos e sistemas legados
▸ Porque micro serviços?
▸ Estratégias de adoção / migração
▸ QA
▸ DevOps
1.
MONOLITOS E
SISTEMAS
LEGADOS
“Você sabe o que significa legado?
É o que você deixa para seus filhos
e para os filhos dos seus filhos.
É o que resta de você depois que
você se for.
Evolução do legado
▸ Evolução gradativa
▸ Refactoring e testes
▸ Modernização da aplicação
▸ Adoção de novas tecnologias de
comunicação
▸ Lento e gradual
▸ Longo prazo para refletir as mudanças
Fonte: https://www.amazon.com/FEATHERS-WORK-EFFECT-LEG-
CODE/dp/0131177052
Evolução do legado:
Fazer o novo
▸ O novo legado?
▸ O valor do legado
▸ Investimento ao longo
do tempo
▸ Existência conjunta
▸ Riscos
Fonte: http://bonkersworld.net/building-software
O melhor dos dois mundos
E se fosse possível fazer um novo, evoluindo o velho,
adotando novas tecnologias e evoluindo o legado?
Código Legado Novas implementações / Serviços
Evolutionary Architecture
Mas e a parte de microserviços?
Fonte: https://www.thoughtworks.com/books/building-evolutionary-architectures Fonte: https://www.thoughtworks.com/books/building-microservices
2.
POR QUE MICRO
SERVIÇOS?
Pontos positivos
▸ Escalabilidade
▸ Possibilidade de usar a ferramenta certa para
cada serviço
▸ Menor tempo de implementação e correções
▸ Serviços de escopo contido e controlado
(testabilidade)
▸ Continuous Delivery
Pontos negativos
▸ Necessidade de infraestrutura maior
▸ Dificuldade maior nos testes de integração
▸ Necessidade de monitoramento e automação
3.
ESTRATÉGIAS DE
ADOÇÃO
“Lei de Conway
Organizações que desenvolvem
sistemas de software tendem a
produzir sistemas que são
cópias das estruturas de
comunicação dessas
organizações.
Cenário Inicial
Grande Monolito
Nossa
Funcionalidade
Cenário Inicial - Visão completa
Nossa
Funcionalidade
Nossa
Funcionalidade
Nossa
Funcionalidade
Nossa
Funcionalidade
Versão 1 Versão 2
Versão 3 Versão N
Passo 1
Lidando com as dependências
Extrair as dependências comuns para serem
utilizadas por ambas as aplicações.
Como exportar com NuGet
Extração das bibliotecas
Framework
Comum
Biblioteca
de Logs
Grande Monolito
Nossa
Funcionalidade
Passo 2
Extraindo os fontes
Cópia sem
Alterações!
Framework
Comum
Biblioteca
de Logs
Grande Monolito
Nossa
Funcionalidade
Nossa
Funcionalidade
Passo 2
Migrando os fontes para versão Delphi Tokyo
Framework
Comum
Biblioteca
de Logs
Grande Monolito
Nossa
Funcionalidade
Nossa
Funcionalidade
Win32
Win64
Linux64
Adequação
e Melhoria
dos Testes
Passo 2
O que aprendemos migrando os
fontes para a versão Delphi Tokyo
▸ Uso de namespaces é excelente para identificar e
gerir cada dependência e serviço.
▸ Multiplataforma ainda precisa de {$IFDEF PLATFORM}
▸ Testes executados em cada plataforma (DUnitX)
▸ TObjectList não é multiplataforma,
mas o TObjectList<TObject> é.
Passo 3
Transformando funcionalidade em Serviço
Framework
Comum
Biblioteca
de Logs
Nosso
ServiçoGrande Monolito
Nossa
Funcionalidade
Passo 3
DockerFile
Passo 4 - Mais serviços surgiram
Novo
Serviço 1
Novo
Serviço 2
Framework
Comum
Biblioteca
de Logs
Grande Monolito
Nosso
Serviço
4.
QA
A importância da automação dos
testes End2End
▸ Garantem os contratos
▸ Garantem que a integração entre os serviços
continue funcionando
▸ Continuam a existir mesmo com mudança de
tecnologia
▸ Servem de documentação
Nosso
Serviço
Estratégias de QA
▸ Metodologia Ágil - ATDD
▸ Testes unitários (TDD) e Code Review
▸ Testes funcionais com framework com Robot
Framework
▸ Documentação viva (BDD executável)
▸ Testes não-funcionais com Locust e Python
Metodologia ATDD
Acceptance Test-Driven Development
▸ Critérios de Aceitação definidos em BDD (Behavior
Driven Development)
▸ Refinamento dos critérios em time (PO + DEV + QA)
▸ TDD
▸ Os testes automatizados funcionais se tornam a
documentação viva do produto
▸ Definition of Done: 100% dos critérios de aceitação
entregue automatizados
Metodologia ATDD
Acceptance Test-Driven Development
Metodologia ATDD
Acceptance Test-Driven Development
Testes Unitários e Code Review
▸ Testes unitários com DUnitX (multiplataforma)
▸ Implementação suportando testes
▹ Uso intensivo de interfaces para facilitar
Mocks
▸ TDD e Test First
▸ Code Review: Oportunidade para outros DEVs
acompanharem o projeto
▸ Code Review: Boas práticas compartilhadas e
feedbacks de possíveis problemas
Automação dos Testes Funcionais
Robot Framework
▸ Open Source: Framework Python, muito bem mantido pela
comunidade e documentação abrangente
▸ Genérico: permite automação de qualquer sistema (web,
serviço, desktop, mobile, etc)
▸ Produtivo: Possui diversas bibliotecas com códigos prontos
para automação de testes (RequestsLibrary, Collections,
RabbitMQLibrary, RedisLibrary, MongoDBLibrary, etc)
▸ Documentação viva: A automação é feita por linguagem mais
humana e suporta o BDD
▸ Virtualização dos Serviços: Utilização de mocks para testes
End2End
Automação dos Testes Não-Funcionais
Locust e Python
▸ Load Testing: testes de carga contra os micro serviços
▹ Utilizamos o LOCUST open source em python
▹ Se o micro serviço se comunicava via mensageria,
utilizamos API REST auxiliar para enviar e receber
requisições
▸ Memory check:
▹ Captura do status da memória do container após várias
rodadas de teste (Linux) e FastMM4 (Windows)
▹ Análise do vazamento de memória via script Python
(Linux)
5.
DEVOPS
Integração Contínua
Continuous Integration
https://aws.amazon.com/pt/devops/continuous-integration/
https://aws.amazon.com/pt/devops/continuous-integration/
Entrega Contínua
Continuous Delivery
Entrega Contínua
Continuous Delivery
Entrega Contínua
Continuous Delivery
Implantação Contínua
Continuous Deployment
https://aws.amazon.com/pt/devops/continuous-integration/
O que utilizamos
Robot Framework
THANKS!
Perguntas?
Vocês podem nos achar em:
https://github.com/felipecaputo
https://github.com/mayribeirofernandes
https://www.linkedin.com/in/felipewcaputo/
https://www.linkedin.com/in/mayfernandes/
felipe.caputo@gmail.com
ammmayara@hotmail.com

Contenu connexe

Tendances

UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsStefan Teixeira
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Leonardo Kobus
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispors4nx
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...tdc-globalcode
 
Dev ops integração contínua com jenkins
Dev ops integração contínua com jenkinsDev ops integração contínua com jenkins
Dev ops integração contínua com jenkinsMichel Cordeiro
 
Plano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiaisPlano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiaisMarcos Pessoa
 
Botando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testesBotando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testeskinow
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsFelipe Santos
 
Qualidade de Software: Ferramentas de apoio
Qualidade de Software: Ferramentas de apoioQualidade de Software: Ferramentas de apoio
Qualidade de Software: Ferramentas de apoioAlex Camargo
 
Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaFernando Boaglio
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoFelipe
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de softwareAlex Camargo
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIECloves da Rocha
 

Tendances (20)

UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao Jenkins
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispor
 
Apresentação controle de versão
Apresentação controle de versãoApresentação controle de versão
Apresentação controle de versão
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
 
Dev ops integração contínua com jenkins
Dev ops integração contínua com jenkinsDev ops integração contínua com jenkins
Dev ops integração contínua com jenkins
 
Plano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiaisPlano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiais
 
Botando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testesBotando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testes
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
 
Qualidade de Software: Ferramentas de apoio
Qualidade de Software: Ferramentas de apoioQualidade de Software: Ferramentas de apoio
Qualidade de Software: Ferramentas de apoio
 
Jenkins
JenkinsJenkins
Jenkins
 
Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do Java
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de software
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIE
 
Jenkins workshop
Jenkins workshopJenkins workshop
Jenkins workshop
 
Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 

Similaire à Desconstruindo monolitos - Construindo microservicos em Delphi

Ciclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaCiclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaRodrigo Kono
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIAlefe Variani
 
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOpsE se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOpsEdson Celio
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaHumberto Streb
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureGrupo de Testes Carioca
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de softwareQualister
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwareJúlio de Lima
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson F. de A. Mafra
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Bugs, DVCS e tools
Bugs, DVCS e toolsBugs, DVCS e tools
Bugs, DVCS e toolsPaulo Mattos
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Renato Groff
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Renato Groff
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 

Similaire à Desconstruindo monolitos - Construindo microservicos em Delphi (20)

Ciclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaCiclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a ponta
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
 
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOpsE se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entrega
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows Azure
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
 
DevOps: Entregando software e serviços rapidamente
DevOps: Entregando software e serviços rapidamenteDevOps: Entregando software e serviços rapidamente
DevOps: Entregando software e serviços rapidamente
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
Automatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOpsAutomatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOps
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Bugs, DVCS e tools
Bugs, DVCS e toolsBugs, DVCS e tools
Bugs, DVCS e tools
 
Startups e DevOps
Startups e DevOpsStartups e DevOps
Startups e DevOps
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
 
ESX Tech Lives - DevOps
ESX Tech Lives - DevOpsESX Tech Lives - DevOps
ESX Tech Lives - DevOps
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Tees Final
Tees FinalTees Final
Tees Final
 

Dernier

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
 
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
 
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
 
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
 
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
 
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
 

Dernier (6)

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
 
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
 
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
 
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
 
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
 
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
 

Desconstruindo monolitos - Construindo microservicos em Delphi

  • 1. Desconstruindo Monolitos Como construir micro serviços Delphi com agilidade e qualidade
  • 2. Hello World!! ✋ Felipe Caputo Desenvolvedor sênior e líder técnico na Softplan, atualmente sou responsável pelo desenvolvimento de soluções para integração entre aplicações dos órgãos da justiça no País. May Fernandes Analista de Testes com mais de 08 anos de experiência com testes de aplicações desktop e micro-serviços. Atualmente trabalho com processos de automação de testes e QAOps na Softplan.
  • 3. Softplan ▸ Principais sistemas em Delphi com mais de 20 anos ▸ Milhares de usuários e milhões de linhas de código ▸ Dezenas de versões ▸ Diversas integrações ▸ Evolução para plataforma ▸ Integração com outras linguagens
  • 4. Agenda ▸ Monolitos e sistemas legados ▸ Porque micro serviços? ▸ Estratégias de adoção / migração ▸ QA ▸ DevOps
  • 6. “Você sabe o que significa legado? É o que você deixa para seus filhos e para os filhos dos seus filhos. É o que resta de você depois que você se for.
  • 7. Evolução do legado ▸ Evolução gradativa ▸ Refactoring e testes ▸ Modernização da aplicação ▸ Adoção de novas tecnologias de comunicação ▸ Lento e gradual ▸ Longo prazo para refletir as mudanças Fonte: https://www.amazon.com/FEATHERS-WORK-EFFECT-LEG- CODE/dp/0131177052
  • 8. Evolução do legado: Fazer o novo ▸ O novo legado? ▸ O valor do legado ▸ Investimento ao longo do tempo ▸ Existência conjunta ▸ Riscos Fonte: http://bonkersworld.net/building-software
  • 9. O melhor dos dois mundos E se fosse possível fazer um novo, evoluindo o velho, adotando novas tecnologias e evoluindo o legado? Código Legado Novas implementações / Serviços Evolutionary Architecture
  • 10. Mas e a parte de microserviços? Fonte: https://www.thoughtworks.com/books/building-evolutionary-architectures Fonte: https://www.thoughtworks.com/books/building-microservices
  • 12. Pontos positivos ▸ Escalabilidade ▸ Possibilidade de usar a ferramenta certa para cada serviço ▸ Menor tempo de implementação e correções ▸ Serviços de escopo contido e controlado (testabilidade) ▸ Continuous Delivery
  • 13. Pontos negativos ▸ Necessidade de infraestrutura maior ▸ Dificuldade maior nos testes de integração ▸ Necessidade de monitoramento e automação
  • 15. “Lei de Conway Organizações que desenvolvem sistemas de software tendem a produzir sistemas que são cópias das estruturas de comunicação dessas organizações.
  • 17. Cenário Inicial - Visão completa Nossa Funcionalidade Nossa Funcionalidade Nossa Funcionalidade Nossa Funcionalidade Versão 1 Versão 2 Versão 3 Versão N
  • 18. Passo 1 Lidando com as dependências Extrair as dependências comuns para serem utilizadas por ambas as aplicações.
  • 20. Extração das bibliotecas Framework Comum Biblioteca de Logs Grande Monolito Nossa Funcionalidade
  • 21. Passo 2 Extraindo os fontes Cópia sem Alterações! Framework Comum Biblioteca de Logs Grande Monolito Nossa Funcionalidade Nossa Funcionalidade
  • 22. Passo 2 Migrando os fontes para versão Delphi Tokyo Framework Comum Biblioteca de Logs Grande Monolito Nossa Funcionalidade Nossa Funcionalidade Win32 Win64 Linux64 Adequação e Melhoria dos Testes
  • 23. Passo 2 O que aprendemos migrando os fontes para a versão Delphi Tokyo ▸ Uso de namespaces é excelente para identificar e gerir cada dependência e serviço. ▸ Multiplataforma ainda precisa de {$IFDEF PLATFORM} ▸ Testes executados em cada plataforma (DUnitX) ▸ TObjectList não é multiplataforma, mas o TObjectList<TObject> é.
  • 24. Passo 3 Transformando funcionalidade em Serviço Framework Comum Biblioteca de Logs Nosso ServiçoGrande Monolito Nossa Funcionalidade
  • 26. Passo 4 - Mais serviços surgiram Novo Serviço 1 Novo Serviço 2 Framework Comum Biblioteca de Logs Grande Monolito Nosso Serviço
  • 27. 4. QA
  • 28.
  • 29. A importância da automação dos testes End2End ▸ Garantem os contratos ▸ Garantem que a integração entre os serviços continue funcionando ▸ Continuam a existir mesmo com mudança de tecnologia ▸ Servem de documentação Nosso Serviço
  • 30. Estratégias de QA ▸ Metodologia Ágil - ATDD ▸ Testes unitários (TDD) e Code Review ▸ Testes funcionais com framework com Robot Framework ▸ Documentação viva (BDD executável) ▸ Testes não-funcionais com Locust e Python
  • 31. Metodologia ATDD Acceptance Test-Driven Development ▸ Critérios de Aceitação definidos em BDD (Behavior Driven Development) ▸ Refinamento dos critérios em time (PO + DEV + QA) ▸ TDD ▸ Os testes automatizados funcionais se tornam a documentação viva do produto ▸ Definition of Done: 100% dos critérios de aceitação entregue automatizados
  • 34. Testes Unitários e Code Review ▸ Testes unitários com DUnitX (multiplataforma) ▸ Implementação suportando testes ▹ Uso intensivo de interfaces para facilitar Mocks ▸ TDD e Test First ▸ Code Review: Oportunidade para outros DEVs acompanharem o projeto ▸ Code Review: Boas práticas compartilhadas e feedbacks de possíveis problemas
  • 35. Automação dos Testes Funcionais Robot Framework ▸ Open Source: Framework Python, muito bem mantido pela comunidade e documentação abrangente ▸ Genérico: permite automação de qualquer sistema (web, serviço, desktop, mobile, etc) ▸ Produtivo: Possui diversas bibliotecas com códigos prontos para automação de testes (RequestsLibrary, Collections, RabbitMQLibrary, RedisLibrary, MongoDBLibrary, etc) ▸ Documentação viva: A automação é feita por linguagem mais humana e suporta o BDD ▸ Virtualização dos Serviços: Utilização de mocks para testes End2End
  • 36. Automação dos Testes Não-Funcionais Locust e Python ▸ Load Testing: testes de carga contra os micro serviços ▹ Utilizamos o LOCUST open source em python ▹ Se o micro serviço se comunicava via mensageria, utilizamos API REST auxiliar para enviar e receber requisições ▸ Memory check: ▹ Captura do status da memória do container após várias rodadas de teste (Linux) e FastMM4 (Windows) ▹ Análise do vazamento de memória via script Python (Linux)
  • 44.
  • 45. THANKS! Perguntas? Vocês podem nos achar em: https://github.com/felipecaputo https://github.com/mayribeirofernandes https://www.linkedin.com/in/felipewcaputo/ https://www.linkedin.com/in/mayfernandes/ felipe.caputo@gmail.com ammmayara@hotmail.com