SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
Walmyr Lima e Silva Filho
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
alinebiath
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
André Thiago
 
Selenium
SeleniumSelenium
Selenium
eurosigdoc acm
 
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
tdc-globalcode
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com Selenium
Victor Serta
 
Apache Maven
Apache MavenApache Maven
Apache Maven
eurosigdoc acm
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
Mayron Cachina
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - Selenium
Israel Santiago
 
Selenium
SeleniumSelenium
Selenium
Tadeu Marinho
 
JUnit
JUnitJUnit
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem
Júlio de Lima
 
Testes Automatizados No Cakephp
Testes Automatizados No CakephpTestes Automatizados No Cakephp
Testes Automatizados No Cakephp
João José Pedrini
 
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
minastestingconference
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
tdc-globalcode
 
Jenkins
JenkinsJenkins
Entrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaEntrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuida
Leonardo Kobus
 
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidadeWordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa
 
Selenium: visão geral
Selenium: visão geralSelenium: visão geral
Selenium: visão geral
Marcelo Andrade
 
Selenium
SeleniumSelenium
Selenium
fatec
 

Mais procurados (20)

Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Selenium
SeleniumSelenium
Selenium
 
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com Selenium
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - Selenium
 
Selenium
SeleniumSelenium
Selenium
 
JUnit
JUnitJUnit
JUnit
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem
 
Testes Automatizados No Cakephp
Testes Automatizados No CakephpTestes Automatizados No Cakephp
Testes Automatizados No Cakephp
 
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
 
Jenkins
JenkinsJenkins
Jenkins
 
Entrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaEntrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuida
 
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidadeWordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
 
Selenium: visão geral
Selenium: visão geralSelenium: visão geral
Selenium: visão geral
 
Selenium
SeleniumSelenium
Selenium
 

Semelhante a TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos 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 ponta
Rodrigo Kono
 
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
Norberto Santos
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
Bruno Souza
 
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
Alefe Variani
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
Marcos Pessoa
 
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
Edson 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 entrega
Humberto 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 Azure
Grupo de Testes Carioca
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
Ricardo Martins ☁
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
Carlos Gonzaga
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
Qualister
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
Júlio de Lima
 
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
Randerson Oliveira Melville Rebouças
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
Jackson F. de A. Mafra
 
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
Leandro Kersting de Freitas
 
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
Renato Groff
 
Bugs, DVCS e tools
Bugs, DVCS e toolsBugs, DVCS e tools
Bugs, DVCS e tools
Paulo Mattos
 
Startups e DevOps
Startups e DevOpsStartups e DevOps
Startups e DevOps
José Bringel Filho
 
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
 

Semelhante a TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos 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
 
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
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
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
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
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...
 

TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos 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. 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