SlideShare une entreprise Scribd logo
1  sur  65
Télécharger pour lire hors ligne
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD
Um bate-papo sobre TDD

Contenu connexe

Plus de Maurício Aniche

Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Maurício Aniche
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016Maurício Aniche
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...Maurício Aniche
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?Maurício Aniche
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Maurício Aniche
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebMaurício Aniche
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Maurício Aniche
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?Maurício Aniche
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013Maurício Aniche
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Maurício Aniche
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Maurício Aniche
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMaurício Aniche
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?Maurício Aniche
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Maurício Aniche
 
Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Maurício Aniche
 
TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?Maurício Aniche
 
Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Maurício Aniche
 
Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Maurício Aniche
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Maurício Aniche
 

Plus de Maurício Aniche (20)

Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]
 
Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?
 
TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?
 
Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?
 
Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Métricas de código, pra que te quero?
Métricas de código, pra que te quero?
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
 

Notes de l'éditeur

  1. quem aqui faz tdd? quem aqui nao faz tdd?
  2. pratica de desenvolvimento de software popularizada pelo kent beck em 2001 a mecânica é simples: você deve escrever um teste antes de escrever o código de produção
  3. muitas! diferentes perspectivas
  4. testes automatizados são bons! queremos isso!
  5. refatorar com testes automatizados é muito fácil e seguro! medo ao refatorar sem isso!
  6. tem teste no nome... muitas definições confusas...
  7. provando por teoria dos conjuntos.. eles não tem nada em comum a não ser os testes de unidade! nenhum livro de TDD fala sobre elas! - vc pensa em muitas outras coisas quando quer testar!
  8. isso mesmo! parece maluquisse?
  9. e pensar eh bom! :)
  10. só de escrever três linhas de código, eu penso sobre um monte de coisa...
  11. o teste é o primeiro cliente - muitas vezes você está mudando um código que nem existe ainda!
  12. TDD é uma das práticas que te dão feedback mais rápido sobre o seu código! - só perde pra programação pareada!!
  13. TDD diz explicitamente que você deve fazer sempre o mais simples possível. Se seguirmos isso, teremos código simples, que é legal! :)
  14. o que vocês gostariam de por numa classe dessa?
  15. grande parte da simplicidade eh baseado nisso! chega de adivinhação! o programador só escreve o que realmente precisa!
  16. mas daqui a pouco eu critico a maneira que as pessoas entendem isso!
  17. claro que não né! nao existe bala de prata!
  18. tdd não vai resolver seus problemas de design!
  19. - vai escrever um código que seja fácil de testar... - existe uma sintonia muito grande entre código fácil de testar, e código de alta qualidade
  20. pq isso acontece? pq você começa a receber as dependências da classe, geralmente pelo construtor! se vc não faz isso, você não consegue testar! - uncle bob diz que gerenciar dependencias eh a parte mais complicada do desenv de sw
  21. você escreve classes mais fáceis de serem usadas.. os comportamentos são mais fáceis de serem invocados, você não quer perder tempo configurando o objeto pra usar e etc!
  22. se você pergunta pra todo mundo qual a vantagem de TDD, todo mundo diz: é receber as dependências pelo construtor! agora fica fácil injetar qualquer coisa lá!
  23. ele evidencia os problemas do seu design
  24. eh você, programador, que resolve o problema!
  25. se você conseguir ver o problema, já é meio caminho andado!! ver é a parte mais difícil !
  26. a maioria deles você percebe basicamente quando está difícil testar! eu, preguicoso, nao quero escrever muito código no meu teste, nao quero pensar muito ali... se eu tenho que pensar muito, algo tá errado!
  27. uma God Class é uma classe que é acoplada com outras 20 classes... ela conhece um monte de classes, geralmente coordena trabalhos, mas não tem inteligência nenhuma...
  28. explica o código
  29. veja que a classe CounterPartyFinder é usada apenas pela MessageUnpacker... Pq não passar a dependência pra ela?
  30. Agora podemos ver que essa regra de negócio pode ser encapsulada dentro de outro objeto menor e mais específico, com um nome que faça sentido ao domínio...
  31. yay!
  32. TDD tem tudo a ver com dependências! eu jah falei que ajuda a pensar melhor nelas? pois é...
  33. softwares de gente grande são gigantes e vai ser inevitável acoplar classe com classe... a diferença é que TDD faz com que você acople de uma maneira diferente..
  34. classes estaveis sao classes que tem menos chance de mudar! imagina uma interface com 10 classes que a implementa? você nunca vai mudá-la, certo? agora imagina depender de uma classe chamada DriverDaEpson? a chance de mudar é grande, concorda? Porque você não liga de acoplar com IList?
  35. logo, queremos acoplar com classes mais estáveis do que a classe cliente. Devemos ir sempre em direção à estabilidade. TDD ajuda nisso, já que você pensa melhor na interface que você precisa depender, e isso geralmente produz interfaces/classes mais estáveis.
  36. você começa a observar diferentes tipos de dependências - dependencies, notifications e adjustments
  37. dependencies você deve tomar cuidado! elas são imprescindiveis pro seu sistema! então tente ao maximo acoplar com classes estáveis! - notifications de alguma forma podem ser removidas do código, e extraídas, como no exemplo...
  38. parecem notifiers, não?
  39. lembra do SRP?
  40. refatorado para observer... agora quem quiser ser notificado sobre a geracao da nota, torna-se um observer, e será notificado assim que a nota for gerada... isso desacopla o GeradorDeNotaFiscal do resto do processo, e permite que evolua de maneira mais fácil!
  41. se vc sente necessidade de testar um método privado, é pq provavelmente essa classe não está coesa! ela tem coisa demais, e vc sente necessidade de testar essas responsabilidades separadas.
  42. você começa a extrair esses comportamentos e colocar em classes menores e mais coesas!!
  43. é mais fácil compor comportamentos do que criar uma classe com todos os comportamentos
  44. imagina agora para escrever todos os testes.. era complicado! precisávamos extrair o comportamento para algum lugar... - outro exemplo: criar filtros... se tal campo foi postado, então adicione isso na condição, e por aí vai...
  45. a primeira refatoracao eh levar cada filtro para uma classe especifica (depois pode ter uma factory para montar os filtros)... veja que ficou facil customizar o comportamento de um filtro, além de ser muito mais fácil testar: agora o número de combinações para cada um deles é muito menor!
  46. classes pequenas sao mais simples!
  47. a ideia é dar passos de bebê em direção à solução mais simples
  48. - a ideia de ficar retornando constantes e acrescentando um monte de if é besteira! - o proprio kent beck diz que nao faz assim
  49. - o objetivo principal é a solução mais simples e não a mudança mais simples!
  50. implementação você refatora mais fácil ! design é difícil refatorar! - ao implementar uma funcionalidade, você deve refatorar o código (e o design) para permitir que essa funcionalidade seja adicionada da maneira mais fácil possível.
  51. - acoplamento muito forte - nao dá pra substituir sem mágica! - quero evoluir sem precisar mexer em código que já existe (OCP)
  52. - deve-se tomar cuidado para não deixar o conceito vazar da classe
  53. veja a API do asp.net mvc! Precisa mockar muita coisa para testar o HttpRequest
  54. - deve-se pensar na melhor abstração - lei de demeter
  55. - Tell, Don’t Ask
  56. ajuda a entender o requisito melhor, e isso gera código mais perto do domínio - levantado como uma das partes mais benéficas do processo pelas pessoas no encontro ágil
  57. classes que você não consegue dar um bom nome tem algo errado... talvez o conceito não esteja muito claro!
  58. ouça eles! eles tem muito a dizer!