47
Como TDD pode influenciar na construção do seu produto? Raphael Paiva

Como TDD pode influenciar na construção do seu Produto?

Embed Size (px)

DESCRIPTION

Mostra as vantagens que o Test Driven Development trás para o design de sua aplicação, além do aprendizadoque ele trouxe no desenvolvimento do JTrace, uma biblioteca de computação gráfica.

Citation preview

Page 1: Como TDD pode influenciar na construção do seu Produto?

Como TDD pode influenciar na construção do seu produto?

Raphael Paiva

Page 2: Como TDD pode influenciar na construção do seu Produto?

Raphael who?

● B.Sc. em Ciência da Computação pela UFRJ● Coordenador técnico da equipe SIGA-UFRJ, integrante

há 6 anos.● Desenvolvimento e manutenção dos Sistemas de

Gestão acadêmica e Acesso da UFRJ.

Page 3: Como TDD pode influenciar na construção do seu Produto?

Raphael who?

● JPA, Seam, EJB, Selenium, TestNG, Puppet, CI, Infra, virtualização... You name it, we do it!

● Especialista em resolver bolas quadradas!

Page 4: Como TDD pode influenciar na construção do seu Produto?

E… Entusiasta de TDD!

Page 5: Como TDD pode influenciar na construção do seu Produto?

Mas chega de papo!

Page 6: Como TDD pode influenciar na construção do seu Produto?

TDD: Testar código antes de escrever código?

Page 7: Como TDD pode influenciar na construção do seu Produto?
Page 8: Como TDD pode influenciar na construção do seu Produto?

Ok, mas...

Page 9: Como TDD pode influenciar na construção do seu Produto?

Testar depois é ruim?

Page 10: Como TDD pode influenciar na construção do seu Produto?

Não!

Page 11: Como TDD pode influenciar na construção do seu Produto?

Testar antes garante mais cobertura do que testar depois?

Page 12: Como TDD pode influenciar na construção do seu Produto?

Talvez...

Page 13: Como TDD pode influenciar na construção do seu Produto?

Então que diferença faz testar antes?

Page 14: Como TDD pode influenciar na construção do seu Produto?

Design!

Page 15: Como TDD pode influenciar na construção do seu Produto?

“TDD doesn't drive good design. TDD gives you immediate feedback about what is likely

to be a bad design.” -- Kent Beck

Page 16: Como TDD pode influenciar na construção do seu Produto?

Pensar no código antes de escrever.

Page 17: Como TDD pode influenciar na construção do seu Produto?

● Como essa classe vai ser usada?● Por quem essa classe será

usada?● Por que essa classe existe?

Page 18: Como TDD pode influenciar na construção do seu Produto?

Design incremental!Baby Steps, nada de BDUF

Page 19: Como TDD pode influenciar na construção do seu Produto?

“Simplicidade--a arte de maximizar a quantidade de trabalho não realizado--é

essencial.” -- Manifesto Ágil

Page 20: Como TDD pode influenciar na construção do seu Produto?

Case: JTraceMotor de geração de imagens por Ray

Tracing

https://github.com/raphaelpaiva/jtrace

Page 21: Como TDD pode influenciar na construção do seu Produto?

● Ray Tracing: técnica utilizada nos filmes com CG -- Alto realismo

Case: JTrace

Page 22: Como TDD pode influenciar na construção do seu Produto?

Case: JTrace

● Deve ser genérico e extensível ● Exigência de qualidade e facilidade de uso!● Usado em trabalhos de alunos de

graduação

Raphael Duarte Paiva
Imagem do Beethoven
Page 23: Como TDD pode influenciar na construção do seu Produto?

O JTrace introduziu alguns desafios

Page 24: Como TDD pode influenciar na construção do seu Produto?

Cada rodada demora entre vários segundos e muitos minutos.

Page 25: Como TDD pode influenciar na construção do seu Produto?

Testar depois: Demorado e difícil.O output é uma imagem.

Page 26: Como TDD pode influenciar na construção do seu Produto?

Erros podem acontecer em dezenas dentre milhões de pixels.

Page 27: Como TDD pode influenciar na construção do seu Produto?

Como garantir qualidade neste cenário?

Page 28: Como TDD pode influenciar na construção do seu Produto?
Page 29: Como TDD pode influenciar na construção do seu Produto?

TDD ao resgate!

Page 30: Como TDD pode influenciar na construção do seu Produto?

● Só implementar algo quando realmente for necessário.

● Generalizar quando necessário, arquitetura modular, baseada em delegação de responsabilidade.

● Unidades mínimas de código.

Design incremental

Page 31: Como TDD pode influenciar na construção do seu Produto?

Por que?

Page 32: Como TDD pode influenciar na construção do seu Produto?

● Mais fácil e, talvez, o único modo são de testar.

● Mais unidades == mais testes == mais confiança

Por que?

Page 33: Como TDD pode influenciar na construção do seu Produto?

Resultados

Page 34: Como TDD pode influenciar na construção do seu Produto?

Bugs capturados e resolvidos com extrema facilidade.

Page 35: Como TDD pode influenciar na construção do seu Produto?

TDD como motivador

Page 36: Como TDD pode influenciar na construção do seu Produto?

Interface enxuta e genérica

API composta basicamente de 5 conceitos.Iluminação, Câmeras, Objetos Geométricos, Primitivas e Listeners.

Page 37: Como TDD pode influenciar na construção do seu Produto?

Fácil de usar!

Obtivemos ótimas implementações de trabalhos e pouquíssimas dúvidas.

Page 38: Como TDD pode influenciar na construção do seu Produto?

Os testes geraram exemplos úteis no aprendizado da API!

Page 39: Como TDD pode influenciar na construção do seu Produto?

0 bugs reportados!

Page 40: Como TDD pode influenciar na construção do seu Produto?

Sucesso == aprendizado

Page 41: Como TDD pode influenciar na construção do seu Produto?

Cobertura por cobertura? Até quando vale o esforço de aumentar a

cobertura de testes?

Raphael Duarte Paiva
Falar sobre a não-cobertura do render, mostrando a tabela de cobertura.
Page 42: Como TDD pode influenciar na construção do seu Produto?

50,9% ou 81,3%?

O que testar?

Page 43: Como TDD pode influenciar na construção do seu Produto?

TDD Funciona só para testes unitários?

Page 44: Como TDD pode influenciar na construção do seu Produto?

NÃO, embora muita gente pense que sim...

Mocks everywhere?

Page 45: Como TDD pode influenciar na construção do seu Produto?

Testar antes: verificação ou design?

Page 46: Como TDD pode influenciar na construção do seu Produto?

Ambos!

Page 47: Como TDD pode influenciar na construção do seu Produto?

Dúvidas?Obrigado!

@raphaelmacoli

[email protected]