SlideShare uma empresa Scribd logo
1 de 84
Baixar para ler offline
TDD depois do
mainstream.
E agora?
Mauricio Aniche
mauricio.aniche@caelum.com.br
www.aniche.com.br
Saturday, August 31, 13
Saturday, August 31, 13
Nós amamos
métodos ágeis
(e TDD mais ainda)!
Saturday, August 31, 13
Na academia...
Saturday, August 31, 13
Mas tudo faz sentido...
Será que vale a pena
estudar melhor?
Saturday, August 31, 13
Homens de nível educacional mais alto apresentaram
maior quantidade de sintomas pseudoneuróticos do
que aqueles que haviam recebido menos instrução;
Homens do meio rural mantiveram-se mais bem-
humorados durante a guerra do que os soldados
recrutados nas cidades;
A capacidade dos homens do Sul (dos EUA) para
suportar o calor era maior do que as dos soldados do
Norte.
Lazarsfeld, P. "The American Soldier - An Expository Review", 1949.
Saturday, August 31, 13
Nossa intuição
pode estar errada!
Saturday, August 31, 13
Mas nós conhecemos
bem de software, não
tem como errarmos!
Saturday, August 31, 13
1: O que é TDD?
Saturday, August 31, 13
O que é TDD?
• Qual a melhor definição sobre TDD?
• “Prática onde o desenvolvedor escreve
testes antes da implementação”
• “Prática onde o desenvolvedor escreve
testes antes da implementação, e os usa
para guiar seu projeto e implementação”
Saturday, August 31, 13
Test-driven development (TDD) is the craft of producing
automated tests for production code, and using that
process to drive design and programming. For every tiny
bit of functionality in the production code, you first
develop a test that specifies and validates what the code
will do.You then produce exactly as much code as will
enable that test to pass.Then you refactor (simplify and
clarify) both the production code and the test code.
www.agilealliance.org/programs/roadmaps/Roadmap/tdd/tdd_index.htm
Saturday, August 31, 13
E aí? Depende...
Saturday, August 31, 13
2.TDD como
prática de testes
Saturday, August 31, 13
TDD como
prática de testes
• Quando o desenvolvedor pratica TDD com
o mero objetivo de aumentar a cobertura
de testes e garantir qualidade externa.
Saturday, August 31, 13
A academia gosta disso...
Aniche. Como a prática de TDD influencia projetos de classes em sistemas
orientados a objetos. Dissertação de mestrado, 2012.
Saturday, August 31, 13
Como prática de teste
Saturday, August 31, 13
Como prática de teste
• Tem vantagem?
Saturday, August 31, 13
Como prática de teste
• Tem vantagem?
• Código “nasce testado”
Saturday, August 31, 13
Como prática de teste
• Tem vantagem?
• Código “nasce testado”
• Menos viés na hora de testar
Saturday, August 31, 13
Como prática de teste
• Tem vantagem?
• Código “nasce testado”
• Menos viés na hora de testar
• Você cobre mais caminhos
Saturday, August 31, 13
Mas esse, com certeza,
não foi meu foco de
estudo.
Saturday, August 31, 13
3.TDD como
prática de design
Saturday, August 31, 13
Como prática de design
• É dito que com a prática de TDD, seu
projeto de classes torna-se melhor.
• Muitos autores (Kent Beck, Martin Fowler,
Robert Martin, Michael Feathers, Steve
Freeman, ...) falam sobre isso.
Saturday, August 31, 13
A academia estudou
isso também...
Aniche. Como a prática de TDD influencia projetos de classes em sistemas
orientados a objetos. Dissertação de mestrado, 2012.
Saturday, August 31, 13
Mas é tão mágico
assim?
• Em 2010, durante um evento ágil,
participantes não souberam bem se
expressar quando o assunto era “como
TDD influencia no projeto de classes”.
Aniche, Ferreira, Gerosa. What Concerns Beginner Test-Driven Development
Practitioners: A Qualitative Analysis of Opinions in an Agile Conference. 2011
Brazilian Workshop on Agile Methods, WBMA 2011.
Saturday, August 31, 13
Outras pessoas
já perceberam que
os efeitos de TDD
não são tão naturais
assim!
M. Siniaalto and P. Abrahamsson, “Does test-driven development improve the program
code? Alarming results from a comparative case study,” Balancing Agility and
Formalism in Software Engineering, vol. 5082, pp. 143–156, 2008.
[Online]. Available: http://dx.doi.org/10. 1007/978- 3- 540- 85279- 7_12
Saturday, August 31, 13
Mas como descobrir?
• Uma das partes mais desafiadores (e
legais!) da ciência é justamente essa: como
bolar um experimento controlado que
simule corretamente uma situação real?
Saturday, August 31, 13
Um Estudo Qualitativo
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
Um Estudo Qualitativo
• ~30 desenvolvedores da indústria
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
Um Estudo Qualitativo
• ~30 desenvolvedores da indústria
• Grande experiência com desenvolvimento
de software (só 20% tinham menos de 2
anos de experiência, 30% entre 6 e 10
anos).
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
Um Estudo Qualitativo
• ~30 desenvolvedores da indústria
• Grande experiência com desenvolvimento
de software (só 20% tinham menos de 2
anos de experiência, 30% entre 6 e 10
anos).
• Praticam TDD há algum tempo (50%
pratica entre 1 a 3 anos)
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
a prática de TDD não guia o
desenvolvedor para um bom
projeto de classes de forma
automática!
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
TDD dá retorno
constante sobre os possíveis
problemas existentes no atual
projeto de classes. É tarefa
do desenvolvedor
perceber esses problemas e
melhorar o projeto de acordo.
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
Regra para a vida!
• “Se está difícil testar, é porque, provavelmente,
há um problema de projeto ou implementação
em seu código”.
• O segredo é perceber, o mais rápido
possível, o momento em que escrever o
teste passou a ser uma tarefa difícil.
Saturday, August 31, 13
Isso quer dizer que...
Saturday, August 31, 13
Isso quer dizer que...
• A busca pela testabilidade faz com que você
busque projetos de classe mais simples
Saturday, August 31, 13
Isso quer dizer que...
• A busca pela testabilidade faz com que você
busque projetos de classe mais simples
• instanciar uma classe, e fazer uso de
comportamentos deve ser fácil
Saturday, August 31, 13
Isso quer dizer que...
• A busca pela testabilidade faz com que você
busque projetos de classe mais simples
• instanciar uma classe, e fazer uso de
comportamentos deve ser fácil
• classes não podem ser complicadas,
senão fica difícil testar)
Saturday, August 31, 13
Isso quer dizer que...
• A busca pela testabilidade faz com que você
busque projetos de classe mais simples
• instanciar uma classe, e fazer uso de
comportamentos deve ser fácil
• classes não podem ser complicadas,
senão fica difícil testar)
• Maneira barata de validar seu projeto de
classes
Saturday, August 31, 13
Quer ver um exemplo?
• Um teste sempre tem 3 partes: um
cenário, uma ação, e uma validação.
• Se escrever o cenário para o teste está
complicado, provavelmente tem algo
errado.
Saturday, August 31, 13
[TestFixture]
public class GeradorDeNotaFiscalTest
{
[Test]
public void DeveGerarUmaNotaFiscal {
var gerador = new GeradorDeNotaFiscal();
var nf = gerador.gera(fatura);
Assert.AreEqual(fatura.Valor * 0.2,
nf.ValorImposto);
}
}
Saturday, August 31, 13
[TestFixture]
public class GeradorDeNotaFiscalTest
{
[Test]
public void DeveGerarUmaNotaFiscal {
var gerador = new GeradorDeNotaFiscal();
var nf = gerador.gera(fatura);
Assert.AreEqual(fatura.Valor * 0.2,
nf.ValorImposto);
}
}
- hmm... ele depende de algo?
- deve receber uma fatura?
- o nome do método está claro?
- o que ele deve retornar?
Saturday, August 31, 13
Bloated constructor
[TestFixture]
public class MessageProcessorTest
{
// atributos com as dependencias que serao mockadas
[SetUp]
public void SetUp() {
// criando mocks
}
[Test]
public void ShouldDoSomething()
{
var processor = new MessageProcessor(unpacker, auditer,
locationFinder, counterPartyFinder, domesticNotifier,
importedNotifier);
processor.OnMessage(BuildSomeSpecificRawMessage());
// algumas assercoes aqui..
}
}
Saturday, August 31, 13
dependencies,
notifications,
adjustments
Freeman, Pryce. Growing Object-Oriented Software, Guided by Tests. 2009.
Saturday, August 31, 13
" [Test]
" public void CalculaISS() {
" " var valor = new CalculaImposto().ParaValor(1500);
" " Assert.AreEqual(1500*1.2, valor);
}
" [Test]
" public void CalculaICMS() {
" " var valor = new CalculaImposto().ParaValor(6000);
" " Assert.AreEqual(6000*1.3, valor);
}
If’s e switches
Você tem testes muito parecidos que geram resultados
diferentes? Quando olha a implementação, ela tem um if ou
switch?
Saturday, August 31, 13
Padrões de projeto podem
ajudar (de novo)!
Saturday, August 31, 13
Métodos privados?
• Devo testá-los?
• O que isso significa?
Saturday, August 31, 13
Olhando pros asserts
• A quantidade de asserts também pode
indicar problemas de qualidade no código
de produção.
Aniche, Oliva, Gerosa. What do the Asserts in a Unit Test Tell Us About
Code Quality? A Study on Open Source and Industrial Projects. CSMR 2013.
Saturday, August 31, 13
Mas como?
• Quanto maior a quantidade de “diferentes
instâncias que recebem um assert”, maior a
chance do código de produção ter
problemas, em termos de complexidade,
linhas de código, número de métodos
invocados.
assertEquals(a.Propriedade, “bla”);
assertEquals(b.Propriedade, “ble”);
Aniche, Oliva, Gerosa. What do the Asserts in a Unit Test Tell Us About
Code Quality? A Study on Open Source and Industrial Projects. CSMR 2013.
Saturday, August 31, 13
Padrões de Feedback
Aniche, Gerosa. How the Practice of TDD Influences Class Design in
Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.
Saturday, August 31, 13
4. Erros comuns
Saturday, August 31, 13
Erros comuns
Aniche, Gerosa. Most Common Mistakes in TDD Practice:
Results from an Online Survey with Developers. 2010, ICST.
Saturday, August 31, 13
Erros comuns
• 45% dos desenvolvedores disseram que
esquecem de refatorar constantemente.
Aniche, Gerosa. Most Common Mistakes in TDD Practice:
Results from an Online Survey with Developers. 2010, ICST.
Saturday, August 31, 13
Erros comuns
• 45% dos desenvolvedores disseram que
esquecem de refatorar constantemente.
• 40% afirmam que fazem uma refatoração
em outro trecho de código durante uma
sessão de TDD.
Aniche, Gerosa. Most Common Mistakes in TDD Practice:
Results from an Online Survey with Developers. 2010, ICST.
Saturday, August 31, 13
Erros comuns
• 45% dos desenvolvedores disseram que
esquecem de refatorar constantemente.
• 40% afirmam que fazem uma refatoração
em outro trecho de código durante uma
sessão de TDD.
• 20% não começam pelo teste mais simples
possível.
Aniche, Gerosa. Most Common Mistakes in TDD Practice:
Results from an Online Survey with Developers. 2010, ICST.
Saturday, August 31, 13
Erros comuns
• 45% dos desenvolvedores disseram que
esquecem de refatorar constantemente.
• 40% afirmam que fazem uma refatoração
em outro trecho de código durante uma
sessão de TDD.
• 20% não começam pelo teste mais simples
possível.
• 35% não fazem baby steps.
Aniche, Gerosa. Most Common Mistakes in TDD Practice:
Results from an Online Survey with Developers. 2010, ICST.
Saturday, August 31, 13
Baby Steps
Saturday, August 31, 13
Baby Steps
• Na minha opinião, uma das partes mais mal
entendidas pela comunidade.
Saturday, August 31, 13
Baby Steps
• Na minha opinião, uma das partes mais mal
entendidas pela comunidade.
• Ser simples, não é ser simplório (e nem
estúpido).
Saturday, August 31, 13
Baby Steps
Saturday, August 31, 13
Baby Steps
• Não faço baby steps o tempo inteiro; mas
fico feliz de saber que posso fazer, se
precisar.
Saturday, August 31, 13
Baby Steps
• Não faço baby steps o tempo inteiro; mas
fico feliz de saber que posso fazer, se
precisar.
• Use sua experiência para decidir em que
momento o passo deve ser menor; ou
maior!
Saturday, August 31, 13
TDD 100% do tempo?
• Eu não pratico TDD quando:
• Meu projeto de classes já está bem
definido.
• A implementação já está clara na minha
cabeça.
• Testes de integração.
Saturday, August 31, 13
Qual a diferença de
escrever o teste antes?
• Fazendo ou não TDD, eu faço ciclos
pequenos.
Aniche. Como a prática de TDD influencia projetos de classes em sistemas
orientados a objetos. Dissertação de mestrado, 2012.
Saturday, August 31, 13
5. Produtividade
Saturday, August 31, 13
Sou menos produtivo?
• Se eu escrevo 100 linhas de produção,
amanhã escreverei 50 de teste e 50 de
produção. Sou menos produtivo?
• Qual a sua noção de produtividade?
Saturday, August 31, 13
6. Outras maluquices
Saturday, August 31, 13
ATDD
Saturday, August 31, 13
ATDD
• A ideia é boa, mas...
Saturday, August 31, 13
ATDD
• A ideia é boa, mas...
• Nunca vi ninguém fazendo.
Saturday, August 31, 13
ATDD
• A ideia é boa, mas...
• Nunca vi ninguém fazendo.
• Os desafios são grandes.
Saturday, August 31, 13
E esse tal de BDD?
Saturday, August 31, 13
E esse tal de BDD?
• O pensamento BDD me agrada.
Saturday, August 31, 13
E esse tal de BDD?
• O pensamento BDD me agrada.
• As ferramentas que “implementam” não.
Não me agrada esses “testes em linguagem
natural”.
Saturday, August 31, 13
7. Ensino de TDD
Saturday, August 31, 13
Como aprendo TDD?
Saturday, August 31, 13
Como aprendo TDD?
• Pratique.
Saturday, August 31, 13
Como aprendo TDD?
• Pratique.
• Geralmente são 2 os problemas: aprender a
testar, e aprender boas práticas de
programação (OO, etc).
Saturday, August 31, 13
Como aprendo TDD?
• Pratique.
• Geralmente são 2 os problemas: aprender a
testar, e aprender boas práticas de
programação (OO, etc).
• Na hora de aprender a testar, a dificuldade
é sempre pensar em cenários. Comece
rascunhando uma lista.
Saturday, August 31, 13
Como aprendo TDD?
• Pratique.
• Geralmente são 2 os problemas: aprender a
testar, e aprender boas práticas de
programação (OO, etc).
• Na hora de aprender a testar, a dificuldade
é sempre pensar em cenários. Comece
rascunhando uma lista.
• TDD é estranho, no começo. Mas depois
acostuma.
Saturday, August 31, 13
“Muito melhor
que Crepúsculo!”
NYTimes
http://www.tddnomundoreal.com.br
“De tirar o fôlego!”
Washington Post
“Um thriller
fascinante!”
Miami Herald
Saturday, August 31, 13
Alura!
Saturday, August 31, 13
http://www.codesheriff.com
Saturday, August 31, 13
Obrigado!
• Meu livro: www.tddnomundoreal.com.br
• Meu blog: http://www.aniche.com.br
• Cursos online do Alura: www.alura.com.br
• Casa do Código: www.casadocodigo.com.br
• Caelum: www.caelum.com.br
• CodeSheriff: www.codesheriff.com
Saturday, August 31, 13

Mais conteúdo relacionado

Destaque

Metodologia da Problematização
Metodologia da ProblematizaçãoMetodologia da Problematização
Metodologia da Problematização
Fabiana Santana
 
15 etapas da problematização
15 etapas da problematização15 etapas da problematização
15 etapas da problematização
Joao Balbi
 
Como problematizar o tema da pesquisa
Como problematizar o tema da pesquisaComo problematizar o tema da pesquisa
Como problematizar o tema da pesquisa
Antenor Casagrande
 

Destaque (20)

Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
SEM e SEO: Como melhorar o posicionamento de um site nas buscas do Google
SEM e SEO: Como melhorar o posicionamento de um site nas buscas do GoogleSEM e SEO: Como melhorar o posicionamento de um site nas buscas do Google
SEM e SEO: Como melhorar o posicionamento de um site nas buscas do Google
 
Relatório final fatec sbc 2012
Relatório final fatec sbc 2012Relatório final fatec sbc 2012
Relatório final fatec sbc 2012
 
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
 
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?
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
A gestão eficaz da comunicação como um fator para o sucesso de projetos
A gestão eficaz da comunicação como um fator para o sucesso de projetosA gestão eficaz da comunicação como um fator para o sucesso de projetos
A gestão eficaz da comunicação como um fator para o sucesso de projetos
 
Apresentação Fatec Norma 569-B
Apresentação Fatec Norma 569-BApresentação Fatec Norma 569-B
Apresentação Fatec Norma 569-B
 
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
 
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?
 
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...
 
Metodologia da Problematização
Metodologia da ProblematizaçãoMetodologia da Problematização
Metodologia da Problematização
 
problematização
problematizaçãoproblematização
problematização
 
15 etapas da problematização
15 etapas da problematização15 etapas da problematização
15 etapas da problematização
 
Pré-projeto de Mestrado
Pré-projeto de MestradoPré-projeto de Mestrado
Pré-projeto de Mestrado
 
Como problematizar o tema da pesquisa
Como problematizar o tema da pesquisaComo problematizar o tema da pesquisa
Como problematizar o tema da pesquisa
 
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
 

Semelhante a TDD depois do mainstream. E agora?

Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
GessdaSilvaMachado
 

Semelhante a TDD depois do mainstream. E agora? (20)

Manual de instruções Feira Municipal de Ciências
Manual de instruções Feira Municipal de CiênciasManual de instruções Feira Municipal de Ciências
Manual de instruções Feira Municipal de Ciências
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Teste Ágeis para todo o time
Teste Ágeis para todo o timeTeste Ágeis para todo o time
Teste Ágeis para todo o time
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Analise e Projeto de Sistemas
Analise e Projeto de SistemasAnalise e Projeto de Sistemas
Analise e Projeto de Sistemas
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
 
Cucumber and BDD
Cucumber and BDDCucumber and BDD
Cucumber and BDD
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Gestão de Projetos e Empreendedorismo (30/04/2013)
Gestão de Projetos e Empreendedorismo (30/04/2013)Gestão de Projetos e Empreendedorismo (30/04/2013)
Gestão de Projetos e Empreendedorismo (30/04/2013)
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testável
 
Test-driven Development - Introdução
Test-driven Development - IntroduçãoTest-driven Development - Introdução
Test-driven Development - Introdução
 
Cesar.Edu Turma S2I
Cesar.Edu Turma S2ICesar.Edu Turma S2I
Cesar.Edu Turma S2I
 
Planejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilPlanejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágil
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Plano de acao curso metodologia
Plano de acao curso metodologiaPlano de acao curso metodologia
Plano de acao curso metodologia
 
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
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade única
 
7 Dicas para Desenvolvedores e Designers em um projeto
7 Dicas para Desenvolvedores e Designers em um projeto7 Dicas para Desenvolvedores e Designers em um projeto
7 Dicas para Desenvolvedores e Designers em um projeto
 
Como_escrever_relato_experiencia
Como_escrever_relato_experienciaComo_escrever_relato_experiencia
Como_escrever_relato_experiencia
 

Mais de Maurício Aniche

Mais de Maurício Aniche (18)

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to Practice
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019
 
Test Automation Day 2018
Test Automation Day 2018Test Automation Day 2018
Test Automation Day 2018
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and Stroopwafels
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)
 
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 (...
 
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
 
[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ê?
 
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...
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introduçãoMétodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
 
The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
 

Último

Último (9)

EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
Convergência TO e TI nas Usinas - Setor Sucroenergético
Convergência TO e TI nas Usinas - Setor SucroenergéticoConvergência TO e TI nas Usinas - Setor Sucroenergético
Convergência TO e TI nas Usinas - Setor Sucroenergético
 
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdfAula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_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
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 

TDD depois do mainstream. E agora?

  • 1. TDD depois do mainstream. E agora? Mauricio Aniche mauricio.aniche@caelum.com.br www.aniche.com.br Saturday, August 31, 13
  • 3. Nós amamos métodos ágeis (e TDD mais ainda)! Saturday, August 31, 13
  • 5. Mas tudo faz sentido... Será que vale a pena estudar melhor? Saturday, August 31, 13
  • 6. Homens de nível educacional mais alto apresentaram maior quantidade de sintomas pseudoneuróticos do que aqueles que haviam recebido menos instrução; Homens do meio rural mantiveram-se mais bem- humorados durante a guerra do que os soldados recrutados nas cidades; A capacidade dos homens do Sul (dos EUA) para suportar o calor era maior do que as dos soldados do Norte. Lazarsfeld, P. "The American Soldier - An Expository Review", 1949. Saturday, August 31, 13
  • 7. Nossa intuição pode estar errada! Saturday, August 31, 13
  • 8. Mas nós conhecemos bem de software, não tem como errarmos! Saturday, August 31, 13
  • 9. 1: O que é TDD? Saturday, August 31, 13
  • 10. O que é TDD? • Qual a melhor definição sobre TDD? • “Prática onde o desenvolvedor escreve testes antes da implementação” • “Prática onde o desenvolvedor escreve testes antes da implementação, e os usa para guiar seu projeto e implementação” Saturday, August 31, 13
  • 11. Test-driven development (TDD) is the craft of producing automated tests for production code, and using that process to drive design and programming. For every tiny bit of functionality in the production code, you first develop a test that specifies and validates what the code will do.You then produce exactly as much code as will enable that test to pass.Then you refactor (simplify and clarify) both the production code and the test code. www.agilealliance.org/programs/roadmaps/Roadmap/tdd/tdd_index.htm Saturday, August 31, 13
  • 13. 2.TDD como prática de testes Saturday, August 31, 13
  • 14. TDD como prática de testes • Quando o desenvolvedor pratica TDD com o mero objetivo de aumentar a cobertura de testes e garantir qualidade externa. Saturday, August 31, 13
  • 15. A academia gosta disso... Aniche. Como a prática de TDD influencia projetos de classes em sistemas orientados a objetos. Dissertação de mestrado, 2012. Saturday, August 31, 13
  • 16. Como prática de teste Saturday, August 31, 13
  • 17. Como prática de teste • Tem vantagem? Saturday, August 31, 13
  • 18. Como prática de teste • Tem vantagem? • Código “nasce testado” Saturday, August 31, 13
  • 19. Como prática de teste • Tem vantagem? • Código “nasce testado” • Menos viés na hora de testar Saturday, August 31, 13
  • 20. Como prática de teste • Tem vantagem? • Código “nasce testado” • Menos viés na hora de testar • Você cobre mais caminhos Saturday, August 31, 13
  • 21. Mas esse, com certeza, não foi meu foco de estudo. Saturday, August 31, 13
  • 22. 3.TDD como prática de design Saturday, August 31, 13
  • 23. Como prática de design • É dito que com a prática de TDD, seu projeto de classes torna-se melhor. • Muitos autores (Kent Beck, Martin Fowler, Robert Martin, Michael Feathers, Steve Freeman, ...) falam sobre isso. Saturday, August 31, 13
  • 24. A academia estudou isso também... Aniche. Como a prática de TDD influencia projetos de classes em sistemas orientados a objetos. Dissertação de mestrado, 2012. Saturday, August 31, 13
  • 25. Mas é tão mágico assim? • Em 2010, durante um evento ágil, participantes não souberam bem se expressar quando o assunto era “como TDD influencia no projeto de classes”. Aniche, Ferreira, Gerosa. What Concerns Beginner Test-Driven Development Practitioners: A Qualitative Analysis of Opinions in an Agile Conference. 2011 Brazilian Workshop on Agile Methods, WBMA 2011. Saturday, August 31, 13
  • 26. Outras pessoas já perceberam que os efeitos de TDD não são tão naturais assim! M. Siniaalto and P. Abrahamsson, “Does test-driven development improve the program code? Alarming results from a comparative case study,” Balancing Agility and Formalism in Software Engineering, vol. 5082, pp. 143–156, 2008. [Online]. Available: http://dx.doi.org/10. 1007/978- 3- 540- 85279- 7_12 Saturday, August 31, 13
  • 27. Mas como descobrir? • Uma das partes mais desafiadores (e legais!) da ciência é justamente essa: como bolar um experimento controlado que simule corretamente uma situação real? Saturday, August 31, 13
  • 28. Um Estudo Qualitativo Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 29. Um Estudo Qualitativo • ~30 desenvolvedores da indústria Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 30. Um Estudo Qualitativo • ~30 desenvolvedores da indústria • Grande experiência com desenvolvimento de software (só 20% tinham menos de 2 anos de experiência, 30% entre 6 e 10 anos). Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 31. Um Estudo Qualitativo • ~30 desenvolvedores da indústria • Grande experiência com desenvolvimento de software (só 20% tinham menos de 2 anos de experiência, 30% entre 6 e 10 anos). • Praticam TDD há algum tempo (50% pratica entre 1 a 3 anos) Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 32. a prática de TDD não guia o desenvolvedor para um bom projeto de classes de forma automática! Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 33. TDD dá retorno constante sobre os possíveis problemas existentes no atual projeto de classes. É tarefa do desenvolvedor perceber esses problemas e melhorar o projeto de acordo. Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 34. Regra para a vida! • “Se está difícil testar, é porque, provavelmente, há um problema de projeto ou implementação em seu código”. • O segredo é perceber, o mais rápido possível, o momento em que escrever o teste passou a ser uma tarefa difícil. Saturday, August 31, 13
  • 35. Isso quer dizer que... Saturday, August 31, 13
  • 36. Isso quer dizer que... • A busca pela testabilidade faz com que você busque projetos de classe mais simples Saturday, August 31, 13
  • 37. Isso quer dizer que... • A busca pela testabilidade faz com que você busque projetos de classe mais simples • instanciar uma classe, e fazer uso de comportamentos deve ser fácil Saturday, August 31, 13
  • 38. Isso quer dizer que... • A busca pela testabilidade faz com que você busque projetos de classe mais simples • instanciar uma classe, e fazer uso de comportamentos deve ser fácil • classes não podem ser complicadas, senão fica difícil testar) Saturday, August 31, 13
  • 39. Isso quer dizer que... • A busca pela testabilidade faz com que você busque projetos de classe mais simples • instanciar uma classe, e fazer uso de comportamentos deve ser fácil • classes não podem ser complicadas, senão fica difícil testar) • Maneira barata de validar seu projeto de classes Saturday, August 31, 13
  • 40. Quer ver um exemplo? • Um teste sempre tem 3 partes: um cenário, uma ação, e uma validação. • Se escrever o cenário para o teste está complicado, provavelmente tem algo errado. Saturday, August 31, 13
  • 41. [TestFixture] public class GeradorDeNotaFiscalTest { [Test] public void DeveGerarUmaNotaFiscal { var gerador = new GeradorDeNotaFiscal(); var nf = gerador.gera(fatura); Assert.AreEqual(fatura.Valor * 0.2, nf.ValorImposto); } } Saturday, August 31, 13
  • 42. [TestFixture] public class GeradorDeNotaFiscalTest { [Test] public void DeveGerarUmaNotaFiscal { var gerador = new GeradorDeNotaFiscal(); var nf = gerador.gera(fatura); Assert.AreEqual(fatura.Valor * 0.2, nf.ValorImposto); } } - hmm... ele depende de algo? - deve receber uma fatura? - o nome do método está claro? - o que ele deve retornar? Saturday, August 31, 13
  • 43. Bloated constructor [TestFixture] public class MessageProcessorTest { // atributos com as dependencias que serao mockadas [SetUp] public void SetUp() { // criando mocks } [Test] public void ShouldDoSomething() { var processor = new MessageProcessor(unpacker, auditer, locationFinder, counterPartyFinder, domesticNotifier, importedNotifier); processor.OnMessage(BuildSomeSpecificRawMessage()); // algumas assercoes aqui.. } } Saturday, August 31, 13
  • 44. dependencies, notifications, adjustments Freeman, Pryce. Growing Object-Oriented Software, Guided by Tests. 2009. Saturday, August 31, 13
  • 45. " [Test] " public void CalculaISS() { " " var valor = new CalculaImposto().ParaValor(1500); " " Assert.AreEqual(1500*1.2, valor); } " [Test] " public void CalculaICMS() { " " var valor = new CalculaImposto().ParaValor(6000); " " Assert.AreEqual(6000*1.3, valor); } If’s e switches Você tem testes muito parecidos que geram resultados diferentes? Quando olha a implementação, ela tem um if ou switch? Saturday, August 31, 13
  • 46. Padrões de projeto podem ajudar (de novo)! Saturday, August 31, 13
  • 47. Métodos privados? • Devo testá-los? • O que isso significa? Saturday, August 31, 13
  • 48. Olhando pros asserts • A quantidade de asserts também pode indicar problemas de qualidade no código de produção. Aniche, Oliva, Gerosa. What do the Asserts in a Unit Test Tell Us About Code Quality? A Study on Open Source and Industrial Projects. CSMR 2013. Saturday, August 31, 13
  • 49. Mas como? • Quanto maior a quantidade de “diferentes instâncias que recebem um assert”, maior a chance do código de produção ter problemas, em termos de complexidade, linhas de código, número de métodos invocados. assertEquals(a.Propriedade, “bla”); assertEquals(b.Propriedade, “ble”); Aniche, Oliva, Gerosa. What do the Asserts in a Unit Test Tell Us About Code Quality? A Study on Open Source and Industrial Projects. CSMR 2013. Saturday, August 31, 13
  • 50. Padrões de Feedback Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012. Saturday, August 31, 13
  • 51. 4. Erros comuns Saturday, August 31, 13
  • 52. Erros comuns Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST. Saturday, August 31, 13
  • 53. Erros comuns • 45% dos desenvolvedores disseram que esquecem de refatorar constantemente. Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST. Saturday, August 31, 13
  • 54. Erros comuns • 45% dos desenvolvedores disseram que esquecem de refatorar constantemente. • 40% afirmam que fazem uma refatoração em outro trecho de código durante uma sessão de TDD. Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST. Saturday, August 31, 13
  • 55. Erros comuns • 45% dos desenvolvedores disseram que esquecem de refatorar constantemente. • 40% afirmam que fazem uma refatoração em outro trecho de código durante uma sessão de TDD. • 20% não começam pelo teste mais simples possível. Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST. Saturday, August 31, 13
  • 56. Erros comuns • 45% dos desenvolvedores disseram que esquecem de refatorar constantemente. • 40% afirmam que fazem uma refatoração em outro trecho de código durante uma sessão de TDD. • 20% não começam pelo teste mais simples possível. • 35% não fazem baby steps. Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST. Saturday, August 31, 13
  • 58. Baby Steps • Na minha opinião, uma das partes mais mal entendidas pela comunidade. Saturday, August 31, 13
  • 59. Baby Steps • Na minha opinião, uma das partes mais mal entendidas pela comunidade. • Ser simples, não é ser simplório (e nem estúpido). Saturday, August 31, 13
  • 61. Baby Steps • Não faço baby steps o tempo inteiro; mas fico feliz de saber que posso fazer, se precisar. Saturday, August 31, 13
  • 62. Baby Steps • Não faço baby steps o tempo inteiro; mas fico feliz de saber que posso fazer, se precisar. • Use sua experiência para decidir em que momento o passo deve ser menor; ou maior! Saturday, August 31, 13
  • 63. TDD 100% do tempo? • Eu não pratico TDD quando: • Meu projeto de classes já está bem definido. • A implementação já está clara na minha cabeça. • Testes de integração. Saturday, August 31, 13
  • 64. Qual a diferença de escrever o teste antes? • Fazendo ou não TDD, eu faço ciclos pequenos. Aniche. Como a prática de TDD influencia projetos de classes em sistemas orientados a objetos. Dissertação de mestrado, 2012. Saturday, August 31, 13
  • 66. Sou menos produtivo? • Se eu escrevo 100 linhas de produção, amanhã escreverei 50 de teste e 50 de produção. Sou menos produtivo? • Qual a sua noção de produtividade? Saturday, August 31, 13
  • 69. ATDD • A ideia é boa, mas... Saturday, August 31, 13
  • 70. ATDD • A ideia é boa, mas... • Nunca vi ninguém fazendo. Saturday, August 31, 13
  • 71. ATDD • A ideia é boa, mas... • Nunca vi ninguém fazendo. • Os desafios são grandes. Saturday, August 31, 13
  • 72. E esse tal de BDD? Saturday, August 31, 13
  • 73. E esse tal de BDD? • O pensamento BDD me agrada. Saturday, August 31, 13
  • 74. E esse tal de BDD? • O pensamento BDD me agrada. • As ferramentas que “implementam” não. Não me agrada esses “testes em linguagem natural”. Saturday, August 31, 13
  • 75. 7. Ensino de TDD Saturday, August 31, 13
  • 77. Como aprendo TDD? • Pratique. Saturday, August 31, 13
  • 78. Como aprendo TDD? • Pratique. • Geralmente são 2 os problemas: aprender a testar, e aprender boas práticas de programação (OO, etc). Saturday, August 31, 13
  • 79. Como aprendo TDD? • Pratique. • Geralmente são 2 os problemas: aprender a testar, e aprender boas práticas de programação (OO, etc). • Na hora de aprender a testar, a dificuldade é sempre pensar em cenários. Comece rascunhando uma lista. Saturday, August 31, 13
  • 80. Como aprendo TDD? • Pratique. • Geralmente são 2 os problemas: aprender a testar, e aprender boas práticas de programação (OO, etc). • Na hora de aprender a testar, a dificuldade é sempre pensar em cenários. Comece rascunhando uma lista. • TDD é estranho, no começo. Mas depois acostuma. Saturday, August 31, 13
  • 81. “Muito melhor que Crepúsculo!” NYTimes http://www.tddnomundoreal.com.br “De tirar o fôlego!” Washington Post “Um thriller fascinante!” Miami Herald Saturday, August 31, 13
  • 84. Obrigado! • Meu livro: www.tddnomundoreal.com.br • Meu blog: http://www.aniche.com.br • Cursos online do Alura: www.alura.com.br • Casa do Código: www.casadocodigo.com.br • Caelum: www.caelum.com.br • CodeSheriff: www.codesheriff.com Saturday, August 31, 13

Notas do Editor

  1. seus testes provem feedback para vc... vc pensa nas dependencias que essa classe tem, na interface que ela proverá para seus clientes e etc...
  2. God Class: classe com alto acoplamento, que conhece ou faz muito.
  3. repare que a diferença é apenas o tipo do imposto
  4. strategy, state ajudam a reduzir essa complexidade!