SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
@luiz_hespanha

luiz.hespanha@nubank.com.br

Desenvolvedor de Software @nubankbrasil
Testes generativos
Motivação
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 2
Testes automatizados.
Testes automatizados
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 3
• Garantir regressão rapidamente.
• Garantir que o que está “entrando
novo” funciona.
Testes automatizados
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 4
• Testes unitários (lógica)
• Testes de integração dentro de um
serviço (BD, Kafka, etc).
• Testes e2e (Integração entre os
serviços)
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 5
Disclaimer
Código Clojure nos próximos slides.
Testes baseados em exemplos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 6
(= a b)
Testes baseados em exemplos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 7
(= [5 2 1] (reverse [1 2 5])
(= [1 2 3 4 5] (reverse [5 4 3 2 1])
(= [5] (reverse [5])
(= [] (reverse [])
(= ["c" "b" "a"] (reverse ["a" "b" "c"]))
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 8
Testes automatizados
Nossos testes estão limitados a nossa
imaginação.
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 9
Testes automatizados
Como podemos melhorar os nossos
testes?
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 10
color
blank
Testes generativos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 11
Testes generativos
Pensar em propriedades
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 12
O que são propriedades?
“Constraints" e “invariantes" que são
verdade *sempre*.
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 13
Um pouco mais formal…
“Property-based testing encourages a high level approach to testing in
the form of abstract invariants functions should satisfy universally,
with the actual test data generated for the programmer by the
testing library. In this way code can be hammered with thousands of
tests that would be infeasible to write by hand, often uncovering subtle
corner cases that wouldn’t be found otherwise.”

Real World Haskell by Bryan O’Sullivan, Don Stewart & John Goerzen
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 14
Testes generativos
(prop/for-all
[a (gen/vector gen/any)
[b (gen/vector gen/any)]
(= (count (concat a b))
(+ (count a) (count b))))]
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 15
Testes generativos
(tc/quick-check 1000 my-property)
;; => {:result true
;; :num-tests 1000
;; :seed 1395119077}
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 16
color
blank
Será que acha bugs mesmo?
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 17
Testes generativos
(-> #{} (conj 109) (conj -110)
transient (disj! -110)
persistent! (conj -110)
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 18
Testes generativos
(def transient-property
(prop/for-all
[a (gen/vector gen-action)]
(= (apply-actions #{} a)
(apply-actions #{} (filter-transients a)))))
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 19
Testes generativos
(tc/quick-check 100000 transient-property)
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 20
Fail…
{:result false,
:failing-size 92,
:num-tests 2893,
:fail "...",
:shrunk
{:total-nodes-visited 440
:depth 83
:result false
:smallest "..."}}
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 21
Generators
(prop/for-all
[a (gen/vector gen/any)
b (gen/vector gen/any)]
(= (count (concat a b))
(+ (count a) (count b))))
Generators
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 22
Generators
any any-printable boolean byte bytes char
char-alpha-numeric char-ascii hash-map int keyword
list map nat neg-int pos-int ratio s-neg-int s-posint
string string-alpha-numeric string-ascii tuple
vector
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 23
Generators
podemos criar os nossos próprios
geradores.
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 24
Generators
(prop/for-all
[p (gen/vector gen/purchases)]
(= (:total-value (close-bill p))
(sum-purchases p)))
Fluxo de trabalho com testes generativos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 25
Sempre que o teste generativo
encontrar um bug, escrever um teste
unitário com o exemplo que falhou.
Fluxo de trabalho com testes generativos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 26
Durante o desenvolvimento deixar o
número de testes alto, e diminuir
quando fizer o “merge" no “master".
Testes generativos
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 27
• Onde estamos usando no Nubank:
• Sistema de contabilidade interno.
• Criação de números de cartão de
crédito.
• Integração com terceiros via
protocolos de baixo nível.
Ferramentas
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 28
Clojure -> https://github.com/clojure/test.check
Scala -> http://www.scalatest.org/user_guide/property_based_testing
Java -> https://github.com/pholser/junit-quickcheck
Haskell -> https://hackage.haskell.org/package/QuickCheck
…provavelmente tem framework para outras linguagens também.
…de qualquer forma, os seus testes não precisam usar a mesma linguagem da sua
aplicação.
Conclusão
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 29
Testes generativos
são complementares
aos seus testes
baseados em
exemplos, e ajudam
a melhorar a
confiabilidade dos
seus testes.
full page
photo
“Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 30
Obrigado!

Mais conteúdo relacionado

Mais procurados

Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic websiteTung Nguyen Thanh
 
IBM WebSphere Application Server version to version comparison
IBM WebSphere Application Server version to version comparisonIBM WebSphere Application Server version to version comparison
IBM WebSphere Application Server version to version comparisonejlp12
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은jieun kim
 
InnoDB Performance Optimisation
InnoDB Performance OptimisationInnoDB Performance Optimisation
InnoDB Performance OptimisationMydbops
 
Low Code Integration with Apache Camel.pdf
Low Code Integration with Apache Camel.pdfLow Code Integration with Apache Camel.pdf
Low Code Integration with Apache Camel.pdfClaus Ibsen
 
What’s New with Flowable?
What’s New with Flowable?What’s New with Flowable?
What’s New with Flowable?Flowable
 
현대카드 Ir 자료 (2014 1 q) ko.pdf_re
현대카드 Ir 자료 (2014 1 q) ko.pdf_re현대카드 Ir 자료 (2014 1 q) ko.pdf_re
현대카드 Ir 자료 (2014 1 q) ko.pdf_reHyundai Finance
 
Well architected ML platforms for Enterprise Data Science
Well architected ML platforms for Enterprise Data ScienceWell architected ML platforms for Enterprise Data Science
Well architected ML platforms for Enterprise Data ScienceLeela Krishna Kandrakota
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack ArchitectureMirantis
 
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and Linkerd
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and LinkerdService Mesh with Apache Kafka, Kubernetes, Envoy, Istio and Linkerd
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and LinkerdKai Wähner
 
Effective administration of IBM Integration Bus - Sanjay Nagchowdhury
Effective administration of IBM Integration Bus - Sanjay NagchowdhuryEffective administration of IBM Integration Bus - Sanjay Nagchowdhury
Effective administration of IBM Integration Bus - Sanjay NagchowdhuryKaren Broughton-Mabbitt
 
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Mydbops
 
OpenStack and MySQL
OpenStack and MySQLOpenStack and MySQL
OpenStack and MySQLMatt Lord
 
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )SANG WON PARK
 
Cloudstack for beginners
Cloudstack for beginnersCloudstack for beginners
Cloudstack for beginnersJoseph Amirani
 
Red Hat Storage - Introduction to GlusterFS
Red Hat Storage - Introduction to GlusterFSRed Hat Storage - Introduction to GlusterFS
Red Hat Storage - Introduction to GlusterFSGlusterFS
 
From Java 17 to 21- A Showcase of JDK Security Enhancements
From Java 17 to 21- A Showcase of JDK Security EnhancementsFrom Java 17 to 21- A Showcase of JDK Security Enhancements
From Java 17 to 21- A Showcase of JDK Security EnhancementsAna-Maria Mihalceanu
 
MySQL InnoDB Cluster / ReplicaSet - Tutorial
MySQL InnoDB Cluster / ReplicaSet - TutorialMySQL InnoDB Cluster / ReplicaSet - Tutorial
MySQL InnoDB Cluster / ReplicaSet - TutorialKenny Gryp
 
Performance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla ClusterPerformance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla ClusterScyllaDB
 
vSphere7 with Tanzu
vSphere7 with Tanzu vSphere7 with Tanzu
vSphere7 with Tanzu VMware Tanzu
 

Mais procurados (20)

Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic website
 
IBM WebSphere Application Server version to version comparison
IBM WebSphere Application Server version to version comparisonIBM WebSphere Application Server version to version comparison
IBM WebSphere Application Server version to version comparison
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 
InnoDB Performance Optimisation
InnoDB Performance OptimisationInnoDB Performance Optimisation
InnoDB Performance Optimisation
 
Low Code Integration with Apache Camel.pdf
Low Code Integration with Apache Camel.pdfLow Code Integration with Apache Camel.pdf
Low Code Integration with Apache Camel.pdf
 
What’s New with Flowable?
What’s New with Flowable?What’s New with Flowable?
What’s New with Flowable?
 
현대카드 Ir 자료 (2014 1 q) ko.pdf_re
현대카드 Ir 자료 (2014 1 q) ko.pdf_re현대카드 Ir 자료 (2014 1 q) ko.pdf_re
현대카드 Ir 자료 (2014 1 q) ko.pdf_re
 
Well architected ML platforms for Enterprise Data Science
Well architected ML platforms for Enterprise Data ScienceWell architected ML platforms for Enterprise Data Science
Well architected ML platforms for Enterprise Data Science
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and Linkerd
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and LinkerdService Mesh with Apache Kafka, Kubernetes, Envoy, Istio and Linkerd
Service Mesh with Apache Kafka, Kubernetes, Envoy, Istio and Linkerd
 
Effective administration of IBM Integration Bus - Sanjay Nagchowdhury
Effective administration of IBM Integration Bus - Sanjay NagchowdhuryEffective administration of IBM Integration Bus - Sanjay Nagchowdhury
Effective administration of IBM Integration Bus - Sanjay Nagchowdhury
 
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera ) Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
Wars of MySQL Cluster ( InnoDB Cluster VS Galera )
 
OpenStack and MySQL
OpenStack and MySQLOpenStack and MySQL
OpenStack and MySQL
 
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
 
Cloudstack for beginners
Cloudstack for beginnersCloudstack for beginners
Cloudstack for beginners
 
Red Hat Storage - Introduction to GlusterFS
Red Hat Storage - Introduction to GlusterFSRed Hat Storage - Introduction to GlusterFS
Red Hat Storage - Introduction to GlusterFS
 
From Java 17 to 21- A Showcase of JDK Security Enhancements
From Java 17 to 21- A Showcase of JDK Security EnhancementsFrom Java 17 to 21- A Showcase of JDK Security Enhancements
From Java 17 to 21- A Showcase of JDK Security Enhancements
 
MySQL InnoDB Cluster / ReplicaSet - Tutorial
MySQL InnoDB Cluster / ReplicaSet - TutorialMySQL InnoDB Cluster / ReplicaSet - Tutorial
MySQL InnoDB Cluster / ReplicaSet - Tutorial
 
Performance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla ClusterPerformance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla Cluster
 
vSphere7 with Tanzu
vSphere7 with Tanzu vSphere7 with Tanzu
vSphere7 with Tanzu
 

Destaque

Datomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaDatomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaLuiz Alberto Hespanha
 
Testes em uma startup do mundo financeiro
Testes em uma startup do mundo financeiroTestes em uma startup do mundo financeiro
Testes em uma startup do mundo financeiroLuiz Alberto Hespanha
 
Workshop Agile Testing Mindset
Workshop Agile Testing MindsetWorkshop Agile Testing Mindset
Workshop Agile Testing MindsetElias Nogueira
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisElias Nogueira
 
A Importância do Teste Continuo
A Importância do Teste ContinuoA Importância do Teste Continuo
A Importância do Teste ContinuoElias Nogueira
 
O que Evitar na Escrita de Criterios de Aceite
O que Evitar na Escrita de Criterios de AceiteO que Evitar na Escrita de Criterios de Aceite
O que Evitar na Escrita de Criterios de AceiteElias Nogueira
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app HíbridaElias Nogueira
 
O testador esta morto!
O testador esta morto!O testador esta morto!
O testador esta morto!Elias Nogueira
 
Clojure No Mundo Real
Clojure No Mundo RealClojure No Mundo Real
Clojure No Mundo RealiMasters
 
Decreto regulamentar 2 de 2010 avaliação de desempenho
Decreto regulamentar 2 de 2010 avaliação de desempenhoDecreto regulamentar 2 de 2010 avaliação de desempenho
Decreto regulamentar 2 de 2010 avaliação de desempenhoMaria João Vasconcelos
 
Palestra tdd - rsjug
Palestra tdd - rsjugPalestra tdd - rsjug
Palestra tdd - rsjugBruno Maomeh
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Bruno Maomeh
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaFrederico Maia Arantes
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a pontaElias Nogueira
 
Métrica da Felicidade
Métrica da FelicidadeMétrica da Felicidade
Métrica da FelicidadeVladson Freire
 
Coaching & desenvolvimento de times
Coaching & desenvolvimento de timesCoaching & desenvolvimento de times
Coaching & desenvolvimento de timesDiego Pacheco
 
Microservices, soa e o melhor das filas
Microservices, soa e o melhor das filasMicroservices, soa e o melhor das filas
Microservices, soa e o melhor das filasDiego Pacheco
 
MSA: Quando a gestão encontra a arquitetura
MSA: Quando a gestão encontra a arquiteturaMSA: Quando a gestão encontra a arquitetura
MSA: Quando a gestão encontra a arquiteturaDiego Pacheco
 
DevOps: The IT Revolution Era
DevOps: The IT Revolution EraDevOps: The IT Revolution Era
DevOps: The IT Revolution EraDiego Pacheco
 

Destaque (20)

Datomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaDatomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionada
 
Testes em uma startup do mundo financeiro
Testes em uma startup do mundo financeiroTestes em uma startup do mundo financeiro
Testes em uma startup do mundo financeiro
 
Workshop Agile Testing Mindset
Workshop Agile Testing MindsetWorkshop Agile Testing Mindset
Workshop Agile Testing Mindset
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionais
 
A Importância do Teste Continuo
A Importância do Teste ContinuoA Importância do Teste Continuo
A Importância do Teste Continuo
 
O que Evitar na Escrita de Criterios de Aceite
O que Evitar na Escrita de Criterios de AceiteO que Evitar na Escrita de Criterios de Aceite
O que Evitar na Escrita de Criterios de Aceite
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app Híbrida
 
O testador esta morto!
O testador esta morto!O testador esta morto!
O testador esta morto!
 
Clojure presentation
Clojure presentationClojure presentation
Clojure presentation
 
Clojure No Mundo Real
Clojure No Mundo RealClojure No Mundo Real
Clojure No Mundo Real
 
Decreto regulamentar 2 de 2010 avaliação de desempenho
Decreto regulamentar 2 de 2010 avaliação de desempenhoDecreto regulamentar 2 de 2010 avaliação de desempenho
Decreto regulamentar 2 de 2010 avaliação de desempenho
 
Palestra tdd - rsjug
Palestra tdd - rsjugPalestra tdd - rsjug
Palestra tdd - rsjug
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - Goiânia
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a ponta
 
Métrica da Felicidade
Métrica da FelicidadeMétrica da Felicidade
Métrica da Felicidade
 
Coaching & desenvolvimento de times
Coaching & desenvolvimento de timesCoaching & desenvolvimento de times
Coaching & desenvolvimento de times
 
Microservices, soa e o melhor das filas
Microservices, soa e o melhor das filasMicroservices, soa e o melhor das filas
Microservices, soa e o melhor das filas
 
MSA: Quando a gestão encontra a arquitetura
MSA: Quando a gestão encontra a arquiteturaMSA: Quando a gestão encontra a arquitetura
MSA: Quando a gestão encontra a arquitetura
 
DevOps: The IT Revolution Era
DevOps: The IT Revolution EraDevOps: The IT Revolution Era
DevOps: The IT Revolution Era
 

Semelhante a Testes generativos

Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM codebits
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 
Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágilabacrazy
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvemAdriano Bertucci
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Marcus Garcia
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018Karla Silva
 
Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Matheus de Oliveira
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018Larissa Soares
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumassabrinajn
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
Gestão ágil: gerar valor partir otimização de fluxo
Gestão ágil: gerar valor partir otimização de fluxoGestão ágil: gerar valor partir otimização de fluxo
Gestão ágil: gerar valor partir otimização de fluxoAnderson Silveira
 
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
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Elaine Cecília Gatto
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Tdc continuous testing
Tdc   continuous testing Tdc   continuous testing
Tdc continuous testing Walter Farias
 

Semelhante a Testes generativos (20)

Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágil
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvem
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 
Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumas
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Gestão ágil: gerar valor partir otimização de fluxo
Gestão ágil: gerar valor partir otimização de fluxoGestão ágil: gerar valor partir otimização de fluxo
Gestão ágil: gerar valor partir otimização de fluxo
 
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
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Tdc continuous testing
Tdc   continuous testing Tdc   continuous testing
Tdc continuous testing
 

Testes generativos

  • 2. Motivação “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 2 Testes automatizados.
  • 3. Testes automatizados “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 3 • Garantir regressão rapidamente. • Garantir que o que está “entrando novo” funciona.
  • 4. Testes automatizados “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 4 • Testes unitários (lógica) • Testes de integração dentro de um serviço (BD, Kafka, etc). • Testes e2e (Integração entre os serviços)
  • 5. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 5 Disclaimer Código Clojure nos próximos slides.
  • 6. Testes baseados em exemplos “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 6 (= a b)
  • 7. Testes baseados em exemplos “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 7 (= [5 2 1] (reverse [1 2 5]) (= [1 2 3 4 5] (reverse [5 4 3 2 1]) (= [5] (reverse [5]) (= [] (reverse []) (= ["c" "b" "a"] (reverse ["a" "b" "c"]))
  • 8. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 8 Testes automatizados Nossos testes estão limitados a nossa imaginação.
  • 9. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 9 Testes automatizados Como podemos melhorar os nossos testes?
  • 10. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 10 color blank Testes generativos
  • 11. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 11 Testes generativos Pensar em propriedades
  • 12. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 12 O que são propriedades? “Constraints" e “invariantes" que são verdade *sempre*.
  • 13. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 13 Um pouco mais formal… “Property-based testing encourages a high level approach to testing in the form of abstract invariants functions should satisfy universally, with the actual test data generated for the programmer by the testing library. In this way code can be hammered with thousands of tests that would be infeasible to write by hand, often uncovering subtle corner cases that wouldn’t be found otherwise.” Real World Haskell by Bryan O’Sullivan, Don Stewart & John Goerzen
  • 14. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 14 Testes generativos (prop/for-all [a (gen/vector gen/any) [b (gen/vector gen/any)] (= (count (concat a b)) (+ (count a) (count b))))]
  • 15. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 15 Testes generativos (tc/quick-check 1000 my-property) ;; => {:result true ;; :num-tests 1000 ;; :seed 1395119077}
  • 16. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 16 color blank Será que acha bugs mesmo?
  • 17. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 17 Testes generativos (-> #{} (conj 109) (conj -110) transient (disj! -110) persistent! (conj -110)
  • 18. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 18 Testes generativos (def transient-property (prop/for-all [a (gen/vector gen-action)] (= (apply-actions #{} a) (apply-actions #{} (filter-transients a)))))
  • 19. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 19 Testes generativos (tc/quick-check 100000 transient-property)
  • 20. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 20 Fail… {:result false, :failing-size 92, :num-tests 2893, :fail "...", :shrunk {:total-nodes-visited 440 :depth 83 :result false :smallest "..."}}
  • 21. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 21 Generators (prop/for-all [a (gen/vector gen/any) b (gen/vector gen/any)] (= (count (concat a b)) (+ (count a) (count b)))) Generators
  • 22. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 22 Generators any any-printable boolean byte bytes char char-alpha-numeric char-ascii hash-map int keyword list map nat neg-int pos-int ratio s-neg-int s-posint string string-alpha-numeric string-ascii tuple vector
  • 23. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 23 Generators podemos criar os nossos próprios geradores.
  • 24. “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 24 Generators (prop/for-all [p (gen/vector gen/purchases)] (= (:total-value (close-bill p)) (sum-purchases p)))
  • 25. Fluxo de trabalho com testes generativos “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 25 Sempre que o teste generativo encontrar um bug, escrever um teste unitário com o exemplo que falhou.
  • 26. Fluxo de trabalho com testes generativos “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 26 Durante o desenvolvimento deixar o número de testes alto, e diminuir quando fizer o “merge" no “master".
  • 27. Testes generativos “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 27 • Onde estamos usando no Nubank: • Sistema de contabilidade interno. • Criação de números de cartão de crédito. • Integração com terceiros via protocolos de baixo nível.
  • 28. Ferramentas “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 28 Clojure -> https://github.com/clojure/test.check Scala -> http://www.scalatest.org/user_guide/property_based_testing Java -> https://github.com/pholser/junit-quickcheck Haskell -> https://hackage.haskell.org/package/QuickCheck …provavelmente tem framework para outras linguagens também. …de qualquer forma, os seus testes não precisam usar a mesma linguagem da sua aplicação.
  • 29. Conclusão “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 29 Testes generativos são complementares aos seus testes baseados em exemplos, e ajudam a melhorar a confiabilidade dos seus testes.
  • 30. full page photo “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014 30 Obrigado!