SlideShare uma empresa Scribd logo
1 de 76
TDD
A influência do Test-Driven Design no
projeto de classes e no design em
sistemas orientados a objetos
Big Design Upfront
Waterfall
Grupo de Pessoas
Grupo de Pessoas
DiscutamHipóteses
DiscutamHipóteses
Design!!
!
Grupo de Pessoas
“Não existem requisitos de
software, mas sim hipóteses.”
Agile
Triangle
Agile
Responder rapidamente ao negóc
Entrega
sustentável
Last Responsible Moment
Tempo
Contexto
Quando voce
Supostamente
Deveria tomar
Uma decisão
Quanto mais
Você aguardar
Melhor a decisão
Last Responsible Moment
Equilíbrio
Equilíbrio
Lean
Gerar valor
Engenharia de Software Ágil
Waterfall BDUF Agile
Go Horse
Process
Espectro do Design
“ Vamos deixar desse jeito
que funciona, depois
refatoramos e a estrutura
e os patterns emergirão.”
Go Horse Proces
Dívida Técnica
- Eder Ignatowicz
Software
Apodrece
…
- Eder Ignatowicz
“ 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
Tempo
CustodeMudança
Designpronto
Manutenção
MurodaImpossibilidadedeManutenção
Waterfall BUFD Agile
Go Horse
Process
Espectro do Design
Evolutionary
Design
Evolutionary
Design
Evolutionary
Design
Refactoring
Continuous Integration
Testing
Software Testing
Software Testing
Refactoring
Decrease ErrorsLow Coupling
Cohesiveness
Knowledge of bussiness
Trust code
TDD!!! <3
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
A GOOD TEST, IS A FAIL TEST !!!
MicroTesting
Cenário
Ação
Validar
+
+
Teste
Teste
Código
JUnit
Red bar
Talk is cheap!
Shut up and show me
the code !
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!?”..
“
O Que Testar ?
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.
Your micro
tests TALKS !
Design bad smells
on unit tests….
Você quer testar um
método privado.
Talvez sua classe
tenha muitas
responsabilidades
Uma mudança no
código quebra
Muitos testes.
Violação do
Open/Close Principle
Instanciar uma classe
20 vezes
Alto Acoplamento
Testar é complicado
por causa do
framework X
Baixa separação da
Lógica quanto ao
Dominio
Você quer utilizar um
framework de Mock
Lei de Deméter
Difícil mockar
uma classe.
Fraca Abstração
Dificil chamar um
método ou instancia
uma classe.
Muitas responsabilidades
Muitos Assets
Violação do Single
Responsibility Principle
Code == Design
Domain Driven
Design
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
Things like TDD and Continuous
Integration have fundamentally
changed the safety in development.
”
“
- Joshua Kerievsky
Como praticar Design evolutivo ?
Como criar sistemas resitentes a mudanças
Como criar sistemas capazes de acomodar
constantes e continuas mudanças?
Como prover crecimento sustentável ?
Equilíbrio
Refactoring
Gerar valor
Testing/CI
+
Cultura de Aprendizado Colaborativo
Supere seus limites
Conviva com os melhores
Apêndices
http://crowdtest.me/10-falhas-software-
marcaram-historia/
http://agilealliance.org
http://agilemanifesto.org
http://infoq.com
Lei de Deméter
SOLID Design Principles
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
toni_esteves
 Software Craftsman;
 Web Developer TRE-AL;
 Graduando Sistemas de Informação;
I am a…

Mais conteúdo relacionado

Mais procurados

TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
Icaro Camelo
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
Leonardo Fernandes
 
Apresentação Da Disciplina Metodologias Ágeis Para Desenvolvimento De S...
Apresentação Da  Disciplina    Metodologias Ágeis Para  Desenvolvimento De  S...Apresentação Da  Disciplina    Metodologias Ágeis Para  Desenvolvimento De  S...
Apresentação Da Disciplina Metodologias Ágeis Para Desenvolvimento De S...
Marcos Cardoso
 
Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste - Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste -
Leonardo Galani
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
elliando dias
 

Mais procurados (20)

Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
Euquipe, evoluindo como dev
Euquipe, evoluindo como devEuquipe, evoluindo como dev
Euquipe, evoluindo como dev
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleProgramação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
 
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
 
Como escolher um framework web
Como escolher um framework webComo escolher um framework web
Como escolher um framework web
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
3 Scrum
3 Scrum3 Scrum
3 Scrum
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
Apresentação Da Disciplina Metodologias Ágeis Para Desenvolvimento De S...
Apresentação Da  Disciplina    Metodologias Ágeis Para  Desenvolvimento De  S...Apresentação Da  Disciplina    Metodologias Ágeis Para  Desenvolvimento De  S...
Apresentação Da Disciplina Metodologias Ágeis Para Desenvolvimento De S...
 
Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste - Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste -
 
Falácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste ÁgilFalácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste Ágil
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Engenharia de Software I - Aula 5
Engenharia de Software I - Aula 5Engenharia de Software I - Aula 5
Engenharia de Software I - Aula 5
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017
 
BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 

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

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
abacrazy
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
Rodrigo Branas
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
Herval Freire
 
Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
Agilidade de Ponta-a-Ponta com Arquiteturas EvolucionáriasAgilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
Breno Barros
 

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

Test driven development
Test driven developmentTest driven development
Test driven development
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
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
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
clean code
clean codeclean code
clean code
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
Agilidade de Ponta-a-Ponta com Arquiteturas EvolucionáriasAgilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias
 
Agile Testing - Qualidade do Discovery ao Deploy
Agile Testing - Qualidade do Discovery ao DeployAgile Testing - Qualidade do Discovery ao Deploy
Agile Testing - Qualidade do Discovery ao Deploy
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Como fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaComo fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em java
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gosta
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
APS - RAD x Ágeis
APS - RAD x ÁgeisAPS - RAD x Ágeis
APS - RAD x Ágeis
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 

Mais de Toni Esteves (6)

eSCM-CL
eSCM-CLeSCM-CL
eSCM-CL
 
Domain driven design in a nutshell
Domain driven design in a nutshellDomain driven design in a nutshell
Domain driven design in a nutshell
 
Logica fuzzy Conceitos e Aplicações
Logica fuzzy   Conceitos e AplicaçõesLogica fuzzy   Conceitos e Aplicações
Logica fuzzy Conceitos e Aplicações
 
Domain Specific Languages - A superficial approach
Domain Specific Languages - A superficial approachDomain Specific Languages - A superficial approach
Domain Specific Languages - A superficial approach
 
Inteligencia Artificial - Linguistica
Inteligencia Artificial - LinguisticaInteligencia Artificial - Linguistica
Inteligencia Artificial - Linguistica
 
Model driven development
Model driven developmentModel driven development
Model driven development
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

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

Notas do Editor

  1. TUDO FUNCIONACLIENTES E MUDANÇASSISTEMAS LEGADOS = PANICO
  2. O ESQUECIMENTO DA ENGENHARIA DE SOFTWARE AGIL PQ O AGIL VIROU MAINSTREAM
  3. AGILE VIROU MAINSTREAMTODO MUNDO FAZ SCRUM, MAS É REALMENTE AGIL?
  4. MELHOR MOMENTO EH SEMPRE O ULTIMO?CULTURA LEAN E CULTURA START UP E O ACUMULO DA DIVIDA TÉCNICA.
  5. ACRESCIDO DE DIVIDAS ANTERIORES E DAI O SOFTWARE VAI APODRECENDO.
  6. TEM UM CARA QUE O JAMES SHORE QUE DIZ…
  7. SE NAO SE PREOCUPAR COM A ENGENHARIA O PROJETO VAI MORRENDO E DEIXANDO DE SER AGIL
  8. MAIS CARO POR UMA FEATURE DO QUE JOGAR FORA E REFAZER DO ZEROREAFATORAR APAGANDO CODIGO NAO EH REAFATORINGMUDANÇA MUITO CARO IMPOSSIBILITA A EVOLUÇÃO DO SOFTWARECOMPROMETIMENTO DO PREOCUPACAO COM O DESIGN EVOLUTIVO
  9. ITERATIVAMENTE FEATURE POR FEATUREALGUM MOMENTO REPENSAR E REFATORAR O MEU DESIGN ?É FACIL ? AINDA ASSIM MANTER UM DESIGN DE QUALIDADE ?
  10. DIFICULDADE OU IMPEDIMENTO DE MANTER O TRIPÉ DO DESIGN EVOLUTIVOREAFCTORING -&gt; EVOLUIR O DESIGN -&gt; REFACTORING SEM TESTE?OU SEJA: TESTAR SOFTWARE EH NECESSARIO..
  11. MAS POR QUE QUE TESTAR SOFTWARE É NECESSARIO?
  12. BAIXA LEGIBILIDADECRESCENTE NUMERO DE BUGSBAIXA QUALIDADE INTERNABAIXA CURVA DE APRENDIZADOFACILITAR ESPECIFICAÇÃO
  13. DECLARAÇÃO DE PRINCIPIOS QUE FUNDAMENTAM O DESENVOLVIMENTO AGIL DE SOFTWAREOU SEJA, MESMO HAVENDO VALOR NOS INTENS À ACIMA, VALORIZAMOS MAIS OS ITENS A ABAIXOKENT BECKWARD CUNINGHAMANDREW HUNTMARTIN FOWLER
  14. TDD É UM ESTILO DE DESENVOLVIMENTO DE SOFTWARE ÁGIL DERIVADO DO MÉTODO E DO AGILE MANIFESTO.A PRÁTICA ENVOLVE A IMPLEMENTAÇÃO DE UM SISTEMA COMEÇANDO PELOS CASOS DE TESTE DE UM OBJETO. ESCREVENDO CASOS DE TESTE E IMPLEMENTANDO ESTES OBJETOS E MÉTODOS, SURGE A NECESSIDADE DE OUTROS MÉTODOS E OBJETOS.
  15. FINALIDADE: ENCONTRAR ERROSMYERS (2004) USA A PSICOLOGIA PARA DEFENDER QUE O OBJETIVO DO TESTE DEVE SER ENCONTRAR ERROS. SE O OBJETIVO FOR CONTRARIO, OU SEJA, PROVAR QUE O SOFTWARE NÃO POSSUI FALHAS, O SUBCONSCIENTE DO TESTADOR TENDERÁ A SELECIONAR DADOS PARA O TESTE COM BAIXA PROBABILIDADE DE FALHAR. LOGO, SE O OBJETIVO FOR ENCONTRAR ERROS, OS DADOS SELECIONADOS TENDERÃO A UMA MAIOR PROBABILIDADE DE FALHAR.
  16. FINALIDADE: ENCONTRAR ERROSMYERS (2004) USA A PSICOLOGIA PARA DEFENDER QUE O OBJETIVO DO TESTE DEVE SER ENCONTRAR ERROS. SE O OBJETIVO FOR CONTRARIO, OU SEJA, PROVAR QUE O SOFTWARE NÃO POSSUI FALHAS, O SUBCONSCIENTE DO TESTADOR TENDERÁ A SELECIONAR DADOS PARA O TESTE COM BAIXA PROBABILIDADE DE FALHAR. LOGO, SE O OBJETIVO FOR ENCONTRAR ERROS, OS DADOS SELECIONADOS TENDERÃO A UMA MAIOR PROBABILIDADE DE FALHAR.AII A GENTE ENTRA NO CONCEITO DE MICROTESTS
  17. TESTAR UNITÁRIO É UM CONCEITO TÃO BELO QUE FICA SIMPLES. ATRAVES DE BABY STEPS
  18. PRECISO TESTAR TUDO?
  19. DESIGN EMERGE
  20. UM MUNDO DE TECNICAS PARA REFATORAR A LEGIBILIDADE DO CODIGOESCREVENDO A REGRA DE NEGOCIO NO MEU CODIGO XEGO A ALGO PARECIDO COM DDD
  21. SEU CODIGO É O SEU DESIGNDESIGN EMERGENTEEXEMPLO DE CLIENTE QUE LIGA PERGUNTANDO A RESPEITO DE REGRA QUE VC LEH NO CODIGO
  22. APAGAR CODIGO E REESCREVER NÃO É REFACTORING. VC PODE VOLTAR NO ERRO.NÃO PENSAR NO DESIGN E DEIXA-L EMERGIR DO REFACTORING
  23. QUESTIONAMENTOS TDD, DESIGN EVOLUTIVO, GOSTAR DE GREENFIELD