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

Data Pipelines with Kafka Connect
Data Pipelines with Kafka ConnectData Pipelines with Kafka Connect
Data Pipelines with Kafka ConnectKaufman Ng
 
CloudFront最近の事例と間違った使い方
CloudFront最近の事例と間違った使い方CloudFront最近の事例と間違った使い方
CloudFront最近の事例と間違った使い方Hirokazu Ouchi
 
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...MinhLeNguyenAnh2
 
ksqlDB로 실시간 데이터 변환 및 스트림 처리
ksqlDB로 실시간 데이터 변환 및 스트림 처리ksqlDB로 실시간 데이터 변환 및 스트림 처리
ksqlDB로 실시간 데이터 변환 및 스트림 처리confluent
 
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG Yuya Ohta
 
Adapting and adopting spm v04
Adapting and adopting spm v04Adapting and adopting spm v04
Adapting and adopting spm v04Carlos Sierra
 
EDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB
 
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Andrejs Prokopjevs
 
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]オラクルエンジニア通信
 
aws health organizations notifications
aws health organizations notificationsaws health organizations notifications
aws health organizations notificationskota tomimatsu
 
Building FoundationDB
Building FoundationDBBuilding FoundationDB
Building FoundationDBFoundationDB
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLJim Mlodgenski
 
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...AWSKRUG - AWS한국사용자모임
 
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...Amazon Web Services
 
Oracle SQL, PL/SQL Performance tuning
Oracle SQL, PL/SQL Performance tuningOracle SQL, PL/SQL Performance tuning
Oracle SQL, PL/SQL Performance tuningSmitha Padmanabhan
 
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인Amazon Web Services Korea
 
10 Problems with your RMAN backup script - whitepaper
10 Problems with your RMAN backup script - whitepaper10 Problems with your RMAN backup script - whitepaper
10 Problems with your RMAN backup script - whitepaperYury Velikanov
 

Mais procurados (20)

Data Pipelines with Kafka Connect
Data Pipelines with Kafka ConnectData Pipelines with Kafka Connect
Data Pipelines with Kafka Connect
 
CloudFront最近の事例と間違った使い方
CloudFront最近の事例と間違った使い方CloudFront最近の事例と間違った使い方
CloudFront最近の事例と間違った使い方
 
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
 
ksqlDB로 실시간 데이터 변환 및 스트림 처리
ksqlDB로 실시간 데이터 변환 및 스트림 처리ksqlDB로 실시간 데이터 변환 및 스트림 처리
ksqlDB로 실시간 데이터 변환 및 스트림 처리
 
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
 
Adapting and adopting spm v04
Adapting and adopting spm v04Adapting and adopting spm v04
Adapting and adopting spm v04
 
EDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB Postgres DBA Best Practices
EDB Postgres DBA Best Practices
 
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
 
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
 
aws health organizations notifications
aws health organizations notificationsaws health organizations notifications
aws health organizations notifications
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Building FoundationDB
Building FoundationDBBuilding FoundationDB
Building FoundationDB
 
Deep Dive on Amazon Redshift
Deep Dive on Amazon RedshiftDeep Dive on Amazon Redshift
Deep Dive on Amazon Redshift
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
 
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...
Amazon Sagemaker Studio를 통한 ML개발하기 - 소성운(크로키닷컴) :: AWS Community D...
 
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...
Deep Dive on Amazon Aurora with PostgreSQL Compatibility (DAT305-R1) - AWS re...
 
Oracle SQL, PL/SQL Performance tuning
Oracle SQL, PL/SQL Performance tuningOracle SQL, PL/SQL Performance tuning
Oracle SQL, PL/SQL Performance tuning
 
Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기
 
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인
Aurora MySQL Backtrack을 이용한 빠른 복구 방법 - 진교선 :: AWS Database Modernization Day 온라인
 
10 Problems with your RMAN backup script - whitepaper
10 Problems with your RMAN backup script - whitepaper10 Problems with your RMAN backup script - whitepaper
10 Problems with your RMAN backup script - whitepaper
 

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: Propriedades e Geradores para Melhorar a Qualidade

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: Propriedades e Geradores para Melhorar a Qualidade (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: Propriedades e Geradores para Melhorar a Qualidade

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