SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
Qualidade de
código para
automação de
Testes
Ivan Lampert
Quem somos...
Comunidade
apaixonada
por
Qualidade de
Software
Ajudamos
pessoas
interessadas
em
Qualidade
Conectamos
pessoas para
compartilhar
conhecimento
Realizamos
eventos,
promovemo
s debates...
...com o
apoio de
voluntários e
da
SUCESU-R
S
Esperamos
a sua
participaçã
o ativa...
...trocando
experiências
,
palestrando,
ouvindo...
...sempre
respeitand
o opiniões
divergentes
Crie,
Inove,
Faça parte
desta
colmeia!
- Assine a lista de
Presença
Os certificados de
participação serão
enviados por e-mail
para todos que
assinaram a lista de
presença
- Submeta a sua
palestra
- Preencha a ficha
de avaliação do
evento
Não esqueça!
Fique ligado nos
próximos eventos!
- Está rolando o TDC
Floripa
- Agenda de eventos
SUCESU-RS
- Agenda eventos
TECNOPUC
Qualidade de código
para automação de
Testes
Ivan Lampert
Lean Thinker
6
“Qualquer idiota pode escrever código
que um computador entenda. Bons
programadores escrevem código que
humanos podem entender.”
― Martin Fowler
O QUE PODE SER
MEDIDO, PODE SER
MELHORADO
8
Tem WTF/minuto no Sonar?
9
Estamos a
____
dias sem um WTF
Code Refactoring
Clean Code
Design Patterns
10
DESIGN PATTERNS
Padrão é tão bom, que cada um tem o seu!
11
1
Por que padrões?
Soluções testadas,
aprimoradas e utilizadas
para problemas recorrentes
dentro de um determinado
contexto.
12
Quais os tipos?
13
Estruturação: se preocupam com a forma como objetos são compostos.
Criação: fornecem meios para criar/instanciar objetos.
Comportamento: focados na comunicação entre os objetos.
Estrutura do Design Pattern
14
O contexto: descreve em que contexto deve ser utilizado.
O problema: descreve o problema a ser resolvido.
A solução: descreve o meio e o modo de como deve ser resolvido.
A consequência: as consequências resultadas do uso.
E OS EXEMPLOS?
15
Factory
16
O problema:
Centralizar as regras de criação de um objeto.
Centralizar as validações para instanciar um novo objeto.
Minimizar o esforço para instanciar objetos.
17
FabricaDeNotaFiscal
NotaFiscal notaSemCliente = FabricaDeNotaFiscal.criarSemCliente();
NotaFiscal notaSemProdutos = FabricaDeNotaFiscal.criarSemProdutos();
NotaFiscal notaComProdutoSemEstoque = FabricaDeNotaFiscal.criarComProdutoSemEstoque();
18
Para objetos de negócio:
Collection<Produto> produtos = FabricaDeProduto.criarLista (7);
Produto produtoSemEstoque = FabricaDeProduto.criarSemEstoque();
Pessoa pessoaNaFilaParaAtendimento = FabricaDePessoa.criarVicente();
Cliente pagadorDeContas = FabricaDePessoa.criar("Arthur", "111.444.000-11“);
Vendedor melhorVendedor = FabricaDeVendedor.criarMarcio();
Veiculo veiculoSemPlaca = FabricaDeVeiculo.criarSemPlaca();
19
Para integração e infraestrutura:
Connection conexaoComOracle = FabricaDeConexoesComBanco.criarComBancoOracle();
Page paginaDeLogin = FabricaDePagina.criarPaginaDeLogin();
Page paginaDeProdutos = FabricaDePagina.criarPaginaListaDeProdutos();
Component campoEmail = FabricaDeComponentes.criarCampoDeEmail();
Message mensagemSucesso = FabricaDeMensagem.criarSalvoComSucesso();
Builder
20
O problema:
Facilitar a criação de objetos complexos.
Centralizar as validações para instanciar um novo objeto.
21
NotaFiscal notaFiscalComProdutoSemEstoque = new
ContrutorDeNotaFiscal()
.comOCliente(FabricaDePessoa.criarEva())
.comOVendedor(FabricaDeVendedor.criarJuliano())
.adicionaProduto(FabricaDeProduto.criarSemEstoque())
.construir();
Builder + Factory?
22
NotaFiscal notaComProdutoSemEstoque = FabricaDeNotaFiscal.criarComProdutoSemEstoque();
23
public static NotaFiscal criarComProdutoSemEstoque() {
NotaFiscal notaFiscalComProdutoSemEstoque = new ContrutorDeNotaFiscal()
.comOCliente(FabricaDePessoa.criarEva())
.comOVendedor(FabricaDeVendedor.criarJuliano())
.adicionaProduto(FabricaDeProduto.criarSemEstoque())
.construir();
return notaFiscalComProdutoSemEstoque;
}
Builder
24
Cenários para Nota Fiscal:
Produtos sem estoque;
Cliente negativado;
Sem forma de pagamento informado;
Cliente sem endereço para entrega;
Valor do desconto maior que o valor total da nota;
Builder
25
Ditadura dos Padrões
“Aprender a usar martelo, parafuso vira prego.”
Builder
26
Quando não devo usar?! Pense em KISS!
Pessoa alguem = new PessoaBuilder()
.comNome("bla bla")
.comTelefone("(51) 98877-5544")
.comCpf("256.432.765-77")
.construir();
KISS
27
Construtor
Pessoal oMesmoAlguem = new Pessoa("bla bla", "(51) 98877-5544",
"256.432.765-77");
Fábrica
Pessoal oMesmoAlguem = FabricaDePessoa.criar("bla bla", "(51)
98877-5544", "256.432.765-77");
Command
28
Problema
Adicionar operações que compoem a execução de um processo.
Command
29
Venda vendaCompleta = new ConstrutorDeVenda()
.comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples())
.adicionarExecucaoAposVenda(new ManutencaoDeEstoqueParaVenda())
.adicionarExecucaoAposVenda(new GeradorDeFaturaParaVenda())
.adicionarExecucaoAposVenda(new EnvioDaFaturaPorEmailAoCliente())
.construir();
vendaCompleta.finalizar();
Command
30
Venda vendaSemFatura = new ConstrutorDeVenda()
.comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples())
.adicionarExecucaoAposVenda(new ManutencaoDeEstoqueParaVenda())
.construir();
vendaSemFatura.finalizar();
Command
31
Venda vendaComFatura = new ConstrutorDeVenda()
.comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples())
.adicionarExecucaoAposVenda(new GeradorDeFaturaParaVenda())
.adicionarExecucaoAposVenda(new EnvioDaFaturaPorEmailAoCliente())
.construir();
vendaComFatura.finalizar();
Command
32
Cliente clienteNegativado = new ClienteBuilder(FabricaDePessoa.criarPedro())
.adicionaExecucao(new GeradorDeVendaParaPessoa())
.adicionaExecucao(new ColocarFaturaComoVencida())
.adicionaExecucao(new NegativarClientePorFaturaVencida())
.construir();
Command
33
Mineracao mineracaoLogApache = new ConstrutorDeMineracao()
.naMinaDeDados(FabricaDeMina.criarComMilharesDeAcessos())
.adicionaGarimpeiro(new GarimpeiroDeNavegadores())
.adicionaGarimpeiro(new GarimpeiroDeLocais())
.adicionaGarimpeiro(new GarimpeiroDeTiposDeAcesso()
.construirMineracao();
Strategy
34
Problema
Mudar dinamicamente o comportamento de um processo, em
tempo de execução.
35
CarrinhoDeCompras carrinhoDoCliente = new ConstrutorDeCarrinhoDeCompras()
.comOCliente(FabricaDePessoa.criarEva())
.comOsProdutos(FabricaDeProduto.criarListaDeProdutos(5))
.comFormaDePagamento(new FormaDePagamentoComBoleto())
.construir();
carrinhoDoCliente.finalizarCompra();
36
CarrinhoDeCompras carrinhoDoCliente = new ConstrutorDeCarrinhoDeCompras()
.comOCliente(FabricaDePessoa.criarEva())
.comOsProdutos(FabricaDeProduto.criarListaDeProdutos(5))
.comFormaDePagamento(new FormaDePagamentoComCartaoDeCredito(3))
.construir();
carrinhoDoCliente.finalizarCompra();
37
CLEAN CODE
Diga onde você vai, que eu vou varrendo...
38
2
Por que limpar?
“Código limpo sempre
parece que foi escrito por
alguém que se importa.”
39
― Robert C. Martin
Nós somos autores!
@author
Seja um autor consciente.
Transmita suas ideias de forma simples e clara.
40
Refatoração de código
WTFs: minimizar o número.
Simplicidade: minimizar a quantidade do código.
Legibilidade: melhorar a leitura do código para nós humanos.
Performance: aumentar a velocidade de execução.
41
Nomes significativos
E o que mais?
42
Nomes significativos
Não repita código
E o que mais?
43
Nomes significativos
Não repita código
Evite comentários
E o que mais?
44
Nomes significativos
Não repita código
Evite comentários
Tenha um padrão
E o que mais?
45
Escoteiro!
Deixe o acampamento mais limpo do que você achou.
46
Só ler um tutorial então?
Qualidade de código = Cultura e Mindset
47
Santa aula de literatura!
― Robert C. Martin
“De fato, a proporção de tempo gasto lendo versus
escrita é bem maior que 10 para 1. Estamos
constantemente lendo código antigo como parte do
esforço para escrever um novo código... [Portanto]
facilitar a leitura facilita a escrita.”
48
Quantidade, não traz qualidade!
49
A Apresentação estará disponível no
LinkedIn do Ivan
https://www.linkedin.com/in/ivan-lam
pert/
E também no Slideshare do GUTS-RS
https://pt.slideshare.net/GUTS-RS
Perguntas?

Contenu connexe

Similaire à [GUTS-RS] Evento Abril 2018 - Qualidade de código para automação de testes

Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Testes automatizados
Testes automatizadosTestes automatizados
Testes automatizadosRodrigo Maia
 
Algoritmos resolvidos lista 2
Algoritmos resolvidos lista 2Algoritmos resolvidos lista 2
Algoritmos resolvidos lista 2isa_ise
 
Slide 06 adicionando produtos e mostrando produto selecionado
Slide 06    adicionando produtos e mostrando produto selecionadoSlide 06    adicionando produtos e mostrando produto selecionado
Slide 06 adicionando produtos e mostrando produto selecionadoRaniere de Lima
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malAndrei Tognolo
 
Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Walney Negreiros
 
Análise e Projeto de Sistemas: Mockup de um Crud no Balsamiq
Análise e Projeto de Sistemas: Mockup de um Crud no BalsamiqAnálise e Projeto de Sistemas: Mockup de um Crud no Balsamiq
Análise e Projeto de Sistemas: Mockup de um Crud no BalsamiqTiago Antônio da Silva
 
Oficina de Python para iniciantes
Oficina de Python para iniciantesOficina de Python para iniciantes
Oficina de Python para iniciantesmarioaxavier7
 
Event Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesEvent Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesPedro Góes
 
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malDEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malElias Souza
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 

Similaire à [GUTS-RS] Evento Abril 2018 - Qualidade de código para automação de testes (20)

Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Testes automatizados
Testes automatizadosTestes automatizados
Testes automatizados
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Hggyjg
HggyjgHggyjg
Hggyjg
 
Algoritmos resolvidos lista 2
Algoritmos resolvidos lista 2Algoritmos resolvidos lista 2
Algoritmos resolvidos lista 2
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
Simulador de processo logístico - Promodel
Simulador de processo logístico - PromodelSimulador de processo logístico - Promodel
Simulador de processo logístico - Promodel
 
Slide 06 adicionando produtos e mostrando produto selecionado
Slide 06    adicionando produtos e mostrando produto selecionadoSlide 06    adicionando produtos e mostrando produto selecionado
Slide 06 adicionando produtos e mostrando produto selecionado
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira mal
 
Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02
 
Análise e Projeto de Sistemas: Mockup de um Crud no Balsamiq
Análise e Projeto de Sistemas: Mockup de um Crud no BalsamiqAnálise e Projeto de Sistemas: Mockup de um Crud no Balsamiq
Análise e Projeto de Sistemas: Mockup de um Crud no Balsamiq
 
Oficina de Python para iniciantes
Oficina de Python para iniciantesOficina de Python para iniciantes
Oficina de Python para iniciantes
 
Event Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesEvent Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro Góes
 
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malDEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Como Implementar Um Menu Ribbon em C#
Como Implementar Um Menu Ribbon em C#Como Implementar Um Menu Ribbon em C#
Como Implementar Um Menu Ribbon em C#
 

Plus de GUTS-RS

[GUTS-RS] Testes de Performance
 [GUTS-RS] Testes de Performance [GUTS-RS] Testes de Performance
[GUTS-RS] Testes de PerformanceGUTS-RS
 
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejarGUTS-RS
 
Evento novembro 2018 - Desafios do QA - Da automação ao Ágil
Evento novembro 2018 - Desafios do QA - Da automação ao ÁgilEvento novembro 2018 - Desafios do QA - Da automação ao Ágil
Evento novembro 2018 - Desafios do QA - Da automação ao ÁgilGUTS-RS
 
Evento setembro 2018 - Criando comunidades de prática na organização
Evento setembro 2018 - Criando comunidades de prática na organizaçãoEvento setembro 2018 - Criando comunidades de prática na organização
Evento setembro 2018 - Criando comunidades de prática na organizaçãoGUTS-RS
 
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOSGUTS-RS
 
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAPGUTS-RS
 
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de TestesGUTS-RS
 
GUTS Talks Março 2018
GUTS Talks Março 2018GUTS Talks Março 2018
GUTS Talks Março 2018GUTS-RS
 
[GUTS-RS] GUTS Talks - Automação de Testes
[GUTS-RS] GUTS Talks - Automação de Testes[GUTS-RS] GUTS Talks - Automação de Testes
[GUTS-RS] GUTS Talks - Automação de TestesGUTS-RS
 
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucessoGUTS-RS
 
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...GUTS-RS
 
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...GUTS-RS
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...GUTS-RS
 
[GUTS-RS] GUTS Talks - Soft Skills
[GUTS-RS] GUTS Talks - Soft Skills[GUTS-RS] GUTS Talks - Soft Skills
[GUTS-RS] GUTS Talks - Soft SkillsGUTS-RS
 
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven DevelopmentGUTS-RS
 
[GUTS-RS] Test Thinking
[GUTS-RS] Test Thinking[GUTS-RS] Test Thinking
[GUTS-RS] Test ThinkingGUTS-RS
 
[GUTS-RS] GUTS Universitário - Carreira de Testes
[GUTS-RS] GUTS Universitário - Carreira de Testes[GUTS-RS] GUTS Universitário - Carreira de Testes
[GUTS-RS] GUTS Universitário - Carreira de TestesGUTS-RS
 
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...GUTS-RS
 
[GUTS-RS] Mobile Testing
[GUTS-RS] Mobile Testing[GUTS-RS] Mobile Testing
[GUTS-RS] Mobile TestingGUTS-RS
 
[GUTS-RS] Testar Interfaces com UX
[GUTS-RS] Testar Interfaces com UX[GUTS-RS] Testar Interfaces com UX
[GUTS-RS] Testar Interfaces com UXGUTS-RS
 

Plus de GUTS-RS (20)

[GUTS-RS] Testes de Performance
 [GUTS-RS] Testes de Performance [GUTS-RS] Testes de Performance
[GUTS-RS] Testes de Performance
 
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 
Evento novembro 2018 - Desafios do QA - Da automação ao Ágil
Evento novembro 2018 - Desafios do QA - Da automação ao ÁgilEvento novembro 2018 - Desafios do QA - Da automação ao Ágil
Evento novembro 2018 - Desafios do QA - Da automação ao Ágil
 
Evento setembro 2018 - Criando comunidades de prática na organização
Evento setembro 2018 - Criando comunidades de prática na organizaçãoEvento setembro 2018 - Criando comunidades de prática na organização
Evento setembro 2018 - Criando comunidades de prática na organização
 
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS
10 ANOS DE GUTS-RS E A EVOLUÇÃO DO QA NESSES 10 ANOS
 
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP
[GUTS-RS] Evento Julho 2018 - Testes de Software em ambientes ERP SAP
 
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes
[GUTS-RS]​ Evento Maio 2018 - Carreira na área de Testes
 
GUTS Talks Março 2018
GUTS Talks Março 2018GUTS Talks Março 2018
GUTS Talks Março 2018
 
[GUTS-RS] GUTS Talks - Automação de Testes
[GUTS-RS] GUTS Talks - Automação de Testes[GUTS-RS] GUTS Talks - Automação de Testes
[GUTS-RS] GUTS Talks - Automação de Testes
 
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
 
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...
[GUTS-RS] Evento Setembro 2017 - Continuous Integration, Delivery e Deploymen...
 
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...
[GUTS-RS] GUDay 2017: Qualidade impulsionando negócios, criando marcas e prod...
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
 
[GUTS-RS] GUTS Talks - Soft Skills
[GUTS-RS] GUTS Talks - Soft Skills[GUTS-RS] GUTS Talks - Soft Skills
[GUTS-RS] GUTS Talks - Soft Skills
 
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
 
[GUTS-RS] Test Thinking
[GUTS-RS] Test Thinking[GUTS-RS] Test Thinking
[GUTS-RS] Test Thinking
 
[GUTS-RS] GUTS Universitário - Carreira de Testes
[GUTS-RS] GUTS Universitário - Carreira de Testes[GUTS-RS] GUTS Universitário - Carreira de Testes
[GUTS-RS] GUTS Universitário - Carreira de Testes
 
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...
[GUTS-RS] MBehavior, um framework de automação de testes multiplataforma para...
 
[GUTS-RS] Mobile Testing
[GUTS-RS] Mobile Testing[GUTS-RS] Mobile Testing
[GUTS-RS] Mobile Testing
 
[GUTS-RS] Testar Interfaces com UX
[GUTS-RS] Testar Interfaces com UX[GUTS-RS] Testar Interfaces com UX
[GUTS-RS] Testar Interfaces com UX
 

Dernier

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 - 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
 
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
 
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
 
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
 
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 - 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 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 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
 

Dernier (9)

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 - 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
 
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
 
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
 
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
 
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 - 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 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 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
 

[GUTS-RS] Evento Abril 2018 - Qualidade de código para automação de testes

  • 1. Qualidade de código para automação de Testes Ivan Lampert
  • 2. Quem somos... Comunidade apaixonada por Qualidade de Software Ajudamos pessoas interessadas em Qualidade Conectamos pessoas para compartilhar conhecimento Realizamos eventos, promovemo s debates... ...com o apoio de voluntários e da SUCESU-R S Esperamos a sua participaçã o ativa... ...trocando experiências , palestrando, ouvindo... ...sempre respeitand o opiniões divergentes Crie, Inove, Faça parte desta colmeia!
  • 3. - Assine a lista de Presença Os certificados de participação serão enviados por e-mail para todos que assinaram a lista de presença - Submeta a sua palestra - Preencha a ficha de avaliação do evento Não esqueça!
  • 4. Fique ligado nos próximos eventos! - Está rolando o TDC Floripa - Agenda de eventos SUCESU-RS - Agenda eventos TECNOPUC
  • 5. Qualidade de código para automação de Testes
  • 7. “Qualquer idiota pode escrever código que um computador entenda. Bons programadores escrevem código que humanos podem entender.” ― Martin Fowler
  • 8. O QUE PODE SER MEDIDO, PODE SER MELHORADO 8
  • 9. Tem WTF/minuto no Sonar? 9 Estamos a ____ dias sem um WTF
  • 11. DESIGN PATTERNS Padrão é tão bom, que cada um tem o seu! 11 1
  • 12. Por que padrões? Soluções testadas, aprimoradas e utilizadas para problemas recorrentes dentro de um determinado contexto. 12
  • 13. Quais os tipos? 13 Estruturação: se preocupam com a forma como objetos são compostos. Criação: fornecem meios para criar/instanciar objetos. Comportamento: focados na comunicação entre os objetos.
  • 14. Estrutura do Design Pattern 14 O contexto: descreve em que contexto deve ser utilizado. O problema: descreve o problema a ser resolvido. A solução: descreve o meio e o modo de como deve ser resolvido. A consequência: as consequências resultadas do uso.
  • 16. Factory 16 O problema: Centralizar as regras de criação de um objeto. Centralizar as validações para instanciar um novo objeto. Minimizar o esforço para instanciar objetos.
  • 17. 17 FabricaDeNotaFiscal NotaFiscal notaSemCliente = FabricaDeNotaFiscal.criarSemCliente(); NotaFiscal notaSemProdutos = FabricaDeNotaFiscal.criarSemProdutos(); NotaFiscal notaComProdutoSemEstoque = FabricaDeNotaFiscal.criarComProdutoSemEstoque();
  • 18. 18 Para objetos de negócio: Collection<Produto> produtos = FabricaDeProduto.criarLista (7); Produto produtoSemEstoque = FabricaDeProduto.criarSemEstoque(); Pessoa pessoaNaFilaParaAtendimento = FabricaDePessoa.criarVicente(); Cliente pagadorDeContas = FabricaDePessoa.criar("Arthur", "111.444.000-11“); Vendedor melhorVendedor = FabricaDeVendedor.criarMarcio(); Veiculo veiculoSemPlaca = FabricaDeVeiculo.criarSemPlaca();
  • 19. 19 Para integração e infraestrutura: Connection conexaoComOracle = FabricaDeConexoesComBanco.criarComBancoOracle(); Page paginaDeLogin = FabricaDePagina.criarPaginaDeLogin(); Page paginaDeProdutos = FabricaDePagina.criarPaginaListaDeProdutos(); Component campoEmail = FabricaDeComponentes.criarCampoDeEmail(); Message mensagemSucesso = FabricaDeMensagem.criarSalvoComSucesso();
  • 20. Builder 20 O problema: Facilitar a criação de objetos complexos. Centralizar as validações para instanciar um novo objeto.
  • 21. 21 NotaFiscal notaFiscalComProdutoSemEstoque = new ContrutorDeNotaFiscal() .comOCliente(FabricaDePessoa.criarEva()) .comOVendedor(FabricaDeVendedor.criarJuliano()) .adicionaProduto(FabricaDeProduto.criarSemEstoque()) .construir();
  • 22. Builder + Factory? 22 NotaFiscal notaComProdutoSemEstoque = FabricaDeNotaFiscal.criarComProdutoSemEstoque();
  • 23. 23 public static NotaFiscal criarComProdutoSemEstoque() { NotaFiscal notaFiscalComProdutoSemEstoque = new ContrutorDeNotaFiscal() .comOCliente(FabricaDePessoa.criarEva()) .comOVendedor(FabricaDeVendedor.criarJuliano()) .adicionaProduto(FabricaDeProduto.criarSemEstoque()) .construir(); return notaFiscalComProdutoSemEstoque; }
  • 24. Builder 24 Cenários para Nota Fiscal: Produtos sem estoque; Cliente negativado; Sem forma de pagamento informado; Cliente sem endereço para entrega; Valor do desconto maior que o valor total da nota;
  • 25. Builder 25 Ditadura dos Padrões “Aprender a usar martelo, parafuso vira prego.”
  • 26. Builder 26 Quando não devo usar?! Pense em KISS! Pessoa alguem = new PessoaBuilder() .comNome("bla bla") .comTelefone("(51) 98877-5544") .comCpf("256.432.765-77") .construir();
  • 27. KISS 27 Construtor Pessoal oMesmoAlguem = new Pessoa("bla bla", "(51) 98877-5544", "256.432.765-77"); Fábrica Pessoal oMesmoAlguem = FabricaDePessoa.criar("bla bla", "(51) 98877-5544", "256.432.765-77");
  • 28. Command 28 Problema Adicionar operações que compoem a execução de um processo.
  • 29. Command 29 Venda vendaCompleta = new ConstrutorDeVenda() .comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples()) .adicionarExecucaoAposVenda(new ManutencaoDeEstoqueParaVenda()) .adicionarExecucaoAposVenda(new GeradorDeFaturaParaVenda()) .adicionarExecucaoAposVenda(new EnvioDaFaturaPorEmailAoCliente()) .construir(); vendaCompleta.finalizar();
  • 30. Command 30 Venda vendaSemFatura = new ConstrutorDeVenda() .comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples()) .adicionarExecucaoAposVenda(new ManutencaoDeEstoqueParaVenda()) .construir(); vendaSemFatura.finalizar();
  • 31. Command 31 Venda vendaComFatura = new ConstrutorDeVenda() .comANotaFiscal(FabricaDeNotaFiscal.criarNotaFiscalSimples()) .adicionarExecucaoAposVenda(new GeradorDeFaturaParaVenda()) .adicionarExecucaoAposVenda(new EnvioDaFaturaPorEmailAoCliente()) .construir(); vendaComFatura.finalizar();
  • 32. Command 32 Cliente clienteNegativado = new ClienteBuilder(FabricaDePessoa.criarPedro()) .adicionaExecucao(new GeradorDeVendaParaPessoa()) .adicionaExecucao(new ColocarFaturaComoVencida()) .adicionaExecucao(new NegativarClientePorFaturaVencida()) .construir();
  • 33. Command 33 Mineracao mineracaoLogApache = new ConstrutorDeMineracao() .naMinaDeDados(FabricaDeMina.criarComMilharesDeAcessos()) .adicionaGarimpeiro(new GarimpeiroDeNavegadores()) .adicionaGarimpeiro(new GarimpeiroDeLocais()) .adicionaGarimpeiro(new GarimpeiroDeTiposDeAcesso() .construirMineracao();
  • 34. Strategy 34 Problema Mudar dinamicamente o comportamento de um processo, em tempo de execução.
  • 35. 35 CarrinhoDeCompras carrinhoDoCliente = new ConstrutorDeCarrinhoDeCompras() .comOCliente(FabricaDePessoa.criarEva()) .comOsProdutos(FabricaDeProduto.criarListaDeProdutos(5)) .comFormaDePagamento(new FormaDePagamentoComBoleto()) .construir(); carrinhoDoCliente.finalizarCompra();
  • 36. 36 CarrinhoDeCompras carrinhoDoCliente = new ConstrutorDeCarrinhoDeCompras() .comOCliente(FabricaDePessoa.criarEva()) .comOsProdutos(FabricaDeProduto.criarListaDeProdutos(5)) .comFormaDePagamento(new FormaDePagamentoComCartaoDeCredito(3)) .construir(); carrinhoDoCliente.finalizarCompra();
  • 37. 37
  • 38. CLEAN CODE Diga onde você vai, que eu vou varrendo... 38 2
  • 39. Por que limpar? “Código limpo sempre parece que foi escrito por alguém que se importa.” 39 ― Robert C. Martin
  • 40. Nós somos autores! @author Seja um autor consciente. Transmita suas ideias de forma simples e clara. 40
  • 41. Refatoração de código WTFs: minimizar o número. Simplicidade: minimizar a quantidade do código. Legibilidade: melhorar a leitura do código para nós humanos. Performance: aumentar a velocidade de execução. 41
  • 42. Nomes significativos E o que mais? 42
  • 43. Nomes significativos Não repita código E o que mais? 43
  • 44. Nomes significativos Não repita código Evite comentários E o que mais? 44
  • 45. Nomes significativos Não repita código Evite comentários Tenha um padrão E o que mais? 45
  • 46. Escoteiro! Deixe o acampamento mais limpo do que você achou. 46
  • 47. Só ler um tutorial então? Qualidade de código = Cultura e Mindset 47
  • 48. Santa aula de literatura! ― Robert C. Martin “De fato, a proporção de tempo gasto lendo versus escrita é bem maior que 10 para 1. Estamos constantemente lendo código antigo como parte do esforço para escrever um novo código... [Portanto] facilitar a leitura facilita a escrita.” 48
  • 49. Quantidade, não traz qualidade! 49
  • 50. A Apresentação estará disponível no LinkedIn do Ivan https://www.linkedin.com/in/ivan-lam pert/ E também no Slideshare do GUTS-RS https://pt.slideshare.net/GUTS-RS Perguntas?