76
TDD A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Embed Size (px)

Citation preview

Page 1: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

TDDA influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Page 2: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 3: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 4: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 5: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Big Design UpfrontWaterfall

Page 6: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Grupo de Pessoas

Page 7: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Grupo de Pessoas

Dis

cu

tam

H

ipó

tese

s

Page 8: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Dis

cu

tam

H

ipó

tese

s

Design!!!

Grupo de Pessoas

Page 9: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

“Não existem requisitos de software, mas sim hipóteses.”

Page 10: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 11: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 12: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Agile Triangle

Page 13: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

AgileResponder rapidamente ao negócio

En

tre

ga

su

ste

ntá

ve

l

Last Responsible Moment

Page 14: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Tempo

Contexto

Quando voceSupostamenteDeveria tomarUma decisão

Quanto maisVocê aguardar

Melhor a decisão

Last Responsible Moment

Page 15: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Equilíbrio

Page 16: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

EquilíbrioLean Gerar valor

Engenharia de Software Ágil

Page 17: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 18: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Waterfall BDUF Agile

Go HorseProcess

Espectro do Design

Page 19: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

“ Vamos deixar desse jeito que funciona, depois refatoramos e a estrutura e os patterns emergirão.”

Go Horse Proces

Page 20: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Dívida Técnica

- Eder Ignatowicz

Page 21: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Software

Apodrece

…- Eder Ignatowicz

Page 22: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

“ Se você desenvolve iterativamente e não aplica práticas de engenharia ágil sua base de código morrerá em 2 ou 3 anos...

Não se preocupar com o design em um processo iterativo torna o projeto insustentável”

James Shore

Page 23: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Tempo

Cust

o d

e M

ud

ança

Desi

gn p

ronto

Manute

nçã

o

Muro

da Im

poss

ibili

dade d

e M

anute

nçã

o

Page 24: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Waterfall BUFD Agile

Go HorseProcess

Espectro do Design

EvolutionaryDesign

Page 25: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Evolutionary Design

Page 26: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Evolutionary DesignR

efa

cto

rin

g

Continuous Integration

Testing

Page 27: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Software Testing

Page 28: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Software Testing

Refactoring

Decrease ErrorsLow Coupling

Cohesiveness

Knowledge of bussiness

Trust code

Page 29: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 30: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

TDD!!! <3

Page 31: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

If you can’t write a test for what you are about to code, then you shouldn't even be thinking about coding- Chaplin 2001

Page 32: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

A GOOD TEST, IS A FAIL TEST !!!

Page 33: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

MicroTesting

Page 34: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 35: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Cenário

Ação

Validar

+

+

Page 36: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Teste

Page 37: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Teste

Código

Page 38: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

JUnit

Page 39: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Red bar

Page 40: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Talk is cheap! Shut up and show me the

code !

Page 41: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Meu Deus, que coisa mais chata e ainda dá mais trabalho. Pra quê eu vou criar uma nova classe com métodos, se eu poderia fazer um método único main, com todos os possíveis erros e ver no console o resultado com System.out.println!?”..

Page 42: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

O Que Testar ?

Page 43: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence (I suspect this level of confidence is high compared to industry standards, but that could just be hubris). If I don't typically make a kind of mistake (like setting the wrong variables in a constructor), I don't test for it. I do tend to make sense of test errors, so I'm extra careful when I have logic with complicated conditionals. When coding on a team, I modify my strategy to carefully test code that we, collectively, tend to get wrong.

Page 44: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Your micro tests TALKS !

Page 45: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Design bad smellson unit tests….

Page 46: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Você quer testar um método

privado.

Page 47: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Talvez sua classe tenha muitas

responsabilidades

Page 48: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Uma mudança no código quebraMuitos testes.

Page 49: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Violação do Open/Close

Principle

Page 50: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Instanciar uma classe

20 vezes

Page 51: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Alto Acoplamento

Page 52: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Testar é complicado por

causa do framework X

Page 53: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Baixa separação da Lógica quanto

ao Dominio

Page 54: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Você quer utilizar um framework de

Mock

Page 55: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Lei de Deméter

Page 56: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Difícil mockar uma classe.

Page 57: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Fraca Abstração

Page 58: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Dificil chamar um método ou

instancia uma classe.

Page 59: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Muitas responsabilidades

Page 60: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Muitos Assets

Page 61: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Violação do Single Responsibility

Principle

Page 62: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Code == Design

Page 63: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 64: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos
Page 65: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Domain DrivenDesign

Page 66: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Refactoring is not the same activity as redesign, where the programmers take a conscious decision to change a large-scale structure. That said,having taken a redesign decision, a team can use a refactoring techniques to get to new design incrementally and safely. ”

- Growing Object Oriented Software Guided By Tests

Page 67: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Things like TDD and Continuous Integration have fundamentally changed the safety in development.

”“

- Joshua Kerievsky

Page 68: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Como prat icar Design evolut ivo ?

Como cr iar s istemas res i tentes a mudanças

Como cr iar s istemas capazes de acomodar

constantes e cont inuas mudanças?

Como prover crec imento sustentável ?

Page 69: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Equilíbrio

Refa

ctori

ng Gerar valor

Testing/CI

Page 70: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

+

Cultura de Aprendizado Colaborativo

Page 71: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Supere seus limites

Page 72: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Conviva com os melhores

Page 73: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Apêndices

Page 74: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

http://crowdtest.me/10-falhas-software-marcaram-historia/

http://agilealliance.org

http://agilemanifesto.org

http://infoq.com

Lei de Deméter

SOLID Design Principles

Page 75: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

Referências

http://www.agiledata.org/essays/tdd.html

http://blog.thiagobelem.net/aprendendo-tdd-ou-

desenvolvimento-orientado-a-testes/

http://www.slideshare.net/denisnferrari/tdd-completo

http://www.infoq.com/br/presentations/design-software-morreu

http://www.infoq.com/br/articles/relacao-tdd-qualidade

http://www.infoq.com/br/articles/levison-TDD-adoption-strategy

http://www.infoq.com/br/news/2010/08/por-onde-comecar-

meus-testes

Page 76: A influência do Test-Driven Design no projeto de classes e no design em sistemas orientados a objetos

toni_esteves

Software Craftsman;

Web Developer TRE-AL;

Graduando Sistemas de Informação;

I am a…