Slide 1

Slide 1 text

Testes em JavaScript Como você nunca viu antes @lfernandescosta @lucasfcosta lucasfcosta.com

Slide 2

Slide 2 text

‣ Sistemas de Informação @UFSC ‣ FullStack Developer @MyTapp ‣ ChaiJS Core Maintainer ‣ Apaixonado por Open Source Quem sou eu?

Slide 3

Slide 3 text

‣ Sistemas de Informação @UFSC ‣ FullStack Developer @MyTapp ‣ ChaiJS Core Maintainer ‣ Apaixonado por Open Source Quem sou eu? Internacionalmente conhecido por causar prejuízo em buffet livre de sushi

Slide 4

Slide 4 text

Quem sou eu? @lfernandescosta @lucasfcosta lucasfcosta.com

Slide 5

Slide 5 text

Por que testar?

Slide 6

Slide 6 text

Qualidade do código

Slide 7

Slide 7 text

Ok, todo mundo sabe disso Qualidade do código

Slide 8

Slide 8 text

Agilidade Melhores estimativas Mais feedback Mais rápido

Slide 9

Slide 9 text

< Redução de custos

Slide 10

Slide 10 text

QA + Trabalho Proativo - Trabalho Reativo

Slide 11

Slide 11 text

Validação ‣ Feedback rápido ‣ Prova que o código está correto OS DOIS LADOS DO TDD TDD

Slide 12

Slide 12 text

Validação Unde omnis iste. ‣ Feedback rápido ‣ Prova que o código está correto OS DOIS LADOS DO TDD Especificação TDD ‣ Demonstra o que aquela peça deve fazer ‣ Demonstra os resultados esperados

Slide 13

Slide 13 text

Validação Unde omnis iste. ‣ Feedback rápido ‣ Prova que o código está correto OS DOIS LADOS DO TDD Especificação TDD ‣ Demonstra o que aquela peça deve fazer ‣ Demonstra os resultados esperados O teste serve como spec

Slide 14

Slide 14 text

Requisitos mais claros Primeiro você pensa

Slide 15

Slide 15 text

Requisitos mais claros Primeiro você pensa Depois você coda

Slide 16

Slide 16 text

Test Driven Design

Slide 17

Slide 17 text

Program to an interface, not an implementation

Slide 18

Slide 18 text

Program to an interface, not an implementation Menos acoplamento

Slide 19

Slide 19 text

"TDD Should be Fun" - James Sinclair

Slide 20

Slide 20 text

Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS.

Slide 21

Slide 21 text

Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣ Feedback positivo constante e rápido

Slide 22

Slide 22 text

Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣ Feedback positivo constante e rápido ‣ Reduz o medo, prova que você está no caminho certo

Slide 23

Slide 23 text

Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣ Feedback positivo constante e rápido ‣ Você sabe que está no caminho certo DIVERSÃO

Slide 24

Slide 24 text

Bons motivos para testar:

Slide 25

Slide 25 text

Bons motivos para testar: 1 Agilidade

Slide 26

Slide 26 text

Bons motivos para testar: 1 Agilidade 2 Redução de custos

Slide 27

Slide 27 text

Bons motivos para testar: 1 Agilidade 2 3 Redução de custos QA Proativo

Slide 28

Slide 28 text

Bons motivos para testar: 1 Agilidade 2 4 3 Redução de custos Especificação QA Proativo

Slide 29

Slide 29 text

Bons motivos para testar: 1 Agilidade 2 4 5 3 Redução de custos Especificação QA Proativo Test Driven Design

Slide 30

Slide 30 text

Bons motivos para testar: 1 Agilidade 2 4 5 6 3 Redução de custos Especificação QA Proativo Diversão Test Driven Design

Slide 31

Slide 31 text

Como escrever bons testes?

Slide 32

Slide 32 text

Só automatizar não é o suficiente

Slide 33

Slide 33 text

Automated crap is still crap

Slide 34

Slide 34 text

Você não pode provar que seu software funciona

Slide 35

Slide 35 text

Você não pode provar que seu software funciona Você só pode provar que ele não funciona

Slide 36

Slide 36 text

Desenvolvimento em pequenos passos

Slide 37

Slide 37 text

Desenvolvimento em pequenos passos Mais segurança

Slide 38

Slide 38 text

Passos do tamanho da sua segurança

Slide 39

Slide 39 text

Passos do tamanho da sua segurança

Slide 40

Slide 40 text

"Qual tamanho devem ter meus testes?"

Slide 41

Slide 41 text

"Qual tamanho devem ter meus testes?"

Slide 42

Slide 42 text

"Qual tamanho devem ter meus testes?" O necessário

Slide 43

Slide 43 text

"Qual tamanho devem ter meus testes?" O necessário Somente o necessário

Slide 44

Slide 44 text

"Qual tamanho devem ter meus testes?" O necessário Somente o necessário O extraordinário é demais

Slide 45

Slide 45 text

Isolamento Teste unitário testa apenas uma unidade (função)

Slide 46

Slide 46 text

Isolamento Teste unitário testa apenas uma unidade (função) Quando algo falhar, sabemos pontualmente o que falhou

Slide 47

Slide 47 text

Isolamento

Slide 48

Slide 48 text

Independência Um teste depende apenas de uma “peça”

Slide 49

Slide 49 text

Independência Um teste depende apenas de uma “peça” Um defeito causa falha em um teste

Slide 50

Slide 50 text

Independência Stubs

Slide 51

Slide 51 text

Independência

Slide 52

Slide 52 text

Foco Um teste tem apenas um objetivo

Slide 53

Slide 53 text

Foco Um teste tem apenas um objetivo Faça o mínimo de asserções por teste

Slide 54

Slide 54 text

Foco Evite testes "frouxos"

Slide 55

Slide 55 text

Foco Evite testes "frouxos"

Slide 56

Slide 56 text

Foco Evite testes "frouxos" Quantos testes passam nisso?

Slide 57

Slide 57 text

Foco

Slide 58

Slide 58 text

Desacoplamento O teste não depende da implementação

Slide 59

Slide 59 text

Desacoplamento O teste não depende da implementação Program to an interface, not an implementation

Slide 60

Slide 60 text

Desacoplamento Você paga por testes em manutenção

Slide 61

Slide 61 text

Para fazer bons testes:

Slide 62

Slide 62 text

Para fazer bons testes: 1 Isolamento

Slide 63

Slide 63 text

Para fazer bons testes: 1 Isolamento 2 Independência

Slide 64

Slide 64 text

Para fazer bons testes: 1 Isolamento 2 3 Independência Foco

Slide 65

Slide 65 text

Para fazer bons testes: 1 Isolamento 2 3 4 Independência Foco Desacoplamento

Slide 66

Slide 66 text

Estou no caminho certo?

Slide 67

Slide 67 text

Testes que falham são testes que produzem informações

Slide 68

Slide 68 text

Testes que falham são testes que produzem informações Se arrisque

Slide 69

Slide 69 text

Code coverage é bom

Slide 70

Slide 70 text

Code coverage é bom Mas não é tudo

Slide 71

Slide 71 text

100% Code Coverage function incrementaIndice(arr, i) ➡ Soma 1 ao valor de índices já existentes ➡ Se o valor naquele índice é indefinido ele passa a ser 1

Slide 72

Slide 72 text

100% Code Coverage

Slide 73

Slide 73 text

100% Code Coverage Asserções

Slide 74

Slide 74 text

100% Code Coverage Asserções Possibilidades de entrada

Slide 75

Slide 75 text

Medindo Coverage

Slide 76

Slide 76 text

Medindo Coverage

Slide 77

Slide 77 text

Cross-platform

Slide 78

Slide 78 text

Cross-platform Diferentes implementações

Slide 79

Slide 79 text

Cross-platform Diferentes implementações Diferentes features suportadas

Slide 80

Slide 80 text

Cross-platform Tenha fallbacks

Slide 81

Slide 81 text

O ecossistema parece grande…

Slide 82

Slide 82 text

O ecossistema parece grande…

Slide 83

Slide 83 text

O ecossistema parece grande… Mas é simples

Slide 84

Slide 84 text

The UNIX Philosophy

Slide 85

Slide 85 text

Mais possibilidades The UNIX Philosophy

Slide 86

Slide 86 text

Mais possibilidades Aprendizado gradual The UNIX Philosophy

Slide 87

Slide 87 text

Recapitulando:

Slide 88

Slide 88 text

Recapitulando: 1 Mocha

Slide 89

Slide 89 text

Recapitulando: 1 2 Mocha Chai

Slide 90

Slide 90 text

Recapitulando: 1 2 3 Mocha Chai Sinon

Slide 91

Slide 91 text

Recapitulando: 1 2 4 3 Mocha Chai Sinon Istanbul

Slide 92

Slide 92 text

Recapitulando: 1 2 4 5 3 Mocha Chai Sinon Istanbul Karma

Slide 93

Slide 93 text

Valeu, Recife!

Slide 94

Slide 94 text

Valeu, Recife! Free software is great software