TDD depois do mainstream. E agora?

Documentos relacionados
ERROS COMUNS EM TEST-DRIVEN DEVELOPMENT. Mauricio

Trilha Agile TDD e 20 coisas que você precisa saber

Introdução ao TDD. Dionatan Moura. #guma10anos Abril de about.me/dionatanmoura

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

Autor: Marcelo Maia

Casa do Código Livros para o programador Rua Vergueiro, º andar Vila Mariana São Paulo SP Brasil

PASSO A PASSO: CRIAÇÃO DE PERSONAS

Como escrever melhor em 5 passos simples

8 Erros Que Podem Acabar Com Seu Negócio de Marketing Digital

Rio de Janeiro, 5 de junho de 2008

COMO INVESTIR PARA GANHAR DINHEIRO

Desenvolvimento Guiado por Testes

Como fazer contato com pessoas importantes para sua carreira?

Quando era menor de idade ficava pedindo aos meus pais para trabalhar, porém menor na época não tinha nada e precisei esperar mais alguns anos.

O papel do CRM no sucesso comercial

Desenvolvendo Software Livre com Programação extrema

Estudo de Caso. Cliente: Rafael Marques. Coach: Rodrigo Santiago. Duração do processo: 12 meses

Como a Prática de TDD Influencia o Projeto de Classes em Sistemas Orientados a Objetos: Padrões de Feedback para o Desenvolvedor

Prof. Me. Marcos Echevarria

10 Regras Para Ter Sucesso Com Negócios Digitais

Produtividade e qualidade de vida - Cresça 10x mais rápido

Na Internet Gramática: atividades

Falhar em se preparar é se preparar para falhar. (Benjamin Franklin).

Como ganhar dinheiro recomendando cursos.

MEU PLANO DE AÇÃO EM MASSA 7 PASSOS PARA UM INCRÍVEL 2015!

Aprenda a Tirar Vantagem da 2º Maior Ferramenta de Buscas do Mundo!

Introdução. Bom, mas antes de começar, eu gostaria de me apresentar..

OLÁ, Bem-vindo. É um guia completão que vai te ajudar com certeza.

Como fazer seu blog se destacar dos outros

Homens. Inteligentes. Manifesto

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

ABCEducatio entrevista Sílvio Bock

Luís Norberto Pascoal

CONFLITO DE SER MÃE EMPREENDEDORA

Antes de tudo... Obrigado!

Como Escrever Artigos Que Convertem?

A criança e as mídias

e-commerce: 13 maneiras de aumentar a conversão

Respostas dos alunos para perguntas do Ciclo de Debates

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Chantilly, 17 de outubro de 2020.

A primeira empresa em que participei foi na Organo Gold que era o gigante em 2012.

11 Segredos para a Construção de Riqueza Capítulo II

UNIDADE VI ESCREVENDO S QUE GERAM RESULTADOS

Orientação Profissional e de Carreira

OS 4 PASSOS ALTA PERFORMANCE A PARTIR DE AGORA PARA VOCÊ COMEÇAR A VIVER EM HIGHSTAKESLIFESTYLE.

Os desafios do Bradesco nas redes sociais

Como Estudar a Bíblia

NOKIA. Em destaque LEE FEINBERG

análise da sequência de

Quem te fala mal de. 10º Plano de aula. 1-Citação as semana: Quem te fala mal de outra pessoa, falará mal de ti também." 2-Meditação da semana:

ÍNDICE... 1 DICAS DE INSTAGRAM... 4 QUEM É ANA TEX?... 5 CONTEÚDO DE ALTA QUALIDADE... 6 CONSISTÊNCIA NAS POSTAGENS... 7

Desvios de redações efetuadas por alunos do Ensino Médio

Evolução do Design através de Testes e o TDD

Integração com Salesforce

Como ficar rico rápido

No E-book anterior 5 PASSOS PARA MUDAR SUA HISTÓRIA, foi passado. alguns exercícios onde é realizada uma análise da sua situação atual para

Ministérios da Família Abençoada, EUA. Candidatos: Como se Registrar

A CD BABY APRESENTA: Criando Eventos de Sucesso no Facebook Catorze regras para lotar os seus shows

A DIVERSIDADE NA ESCOLA

Para a grande maioria das. fazer o que desejo fazer, ou o que eu tenho vontade, sem sentir nenhum tipo de peso ou condenação por aquilo.

Desafio para a família

Programação Extrema. Luis Fernando Machado. Engenharia de Software

Tomada de Decisão uma arte a ser estudada Por: Arthur Diniz

COMO CRIAR UMA ESTRATÉGIA DE MARKETING

Freelapro. Título: Como o Freelancer pode transformar a sua especialidade em um produto digital ganhando assim escala e ganhando mais tempo

Tendo isso em conta, o Bruno nunca esqueceu que essa era a vontade do meu pai e por isso também queria a nossa participação neste projecto.

os botões emocionais Rodrigo T. Antonangelo

Oração. u m a c o n v e r s a d a a l m a

Mariana, 9 anos - Escrever esse livro foi uma experiência interessante, legal e divertida!

Como Criar seu produto digital

Imagens Mentais Por Alexandre Afonso

Os dois foram entrando e ROSE foi contando mais um pouco da história e EDUARDO anotando tudo no caderno.

Aprenda como estudar em quatro etapas PORVIR

Alô, alô.

W W W. G U I A I N V E S T. C O M. B R

Mini e-book HUMANA ENSINAMENTOS AS PRÓXIMAS GERAÇÕES PARA ALICERÇAR OS APRENDIZAGEM ORIENTAR E INCENTIVAR RICAMENTE

Programação Orientada a Testes Rodrigo Rebouças de Almeida

Se você está começando a explorar o marketing digita com o YouTube, então você, certamente, já notou o quão poderosos são os vídeos.


20 perguntas para descobrir como APRENDER MELHOR

A INTERNET COMPLETOU 20 ANOS DE BRASIL EM 2015.

COMO PARTICIPAR EM UMA RODADA DE NEGÓCIOS: Sugestões para as comunidades e associações

Eu sei o que quero! Eu compro o que quero!

COMO FAZER A TRANSIÇÃO

Mário Marcondes Rabello

Empresário. Você curte moda? Gosta de cozinhar? Não existe sorte nos negócios. Há apenas esforço, determinação, e mais esforço.

Por Tiago Bastos Quer Dinheiro Online? 1

Prof. Me. Marcos Echevarria

A LIBERDADE COMO POSSÍVEL CAMINHO PARA A FELICIDADE

Metodologias de desenvolvimento de jogos

Cinco principais qualidades dos melhores professores de Escolas de Negócios

Atividade: Leitura e interpretação de texto. Português- 8º ano professora: Silvia Zanutto

Metodologias Ágeis. Gerenciando e Desenvolvendo Projetos de forma eficiente. Gabriel Verta Rafael Reimberg Vinicius Quaiato

Comprar online é uma delícia, direto do meu sofá sem filas!

Texto 1 O FUTEBOL E A MATEMÁTICA Modelo matemático prevê gols no futebol Moacyr Scliar

Bom Crédito. Lembre-se de que crédito é dinheiro. Passos

Transcrição:

TDD depois do mainstream. E agora? Mauricio Aniche mauricio.aniche@caelum.com.br www.aniche.com.br

Nós amamos métodos ágeis (e TDD mais ainda)!

Na academia...

Mas tudo faz sentido... Será que vale a pena estudar melhor?

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 bemhumorados 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.

Nossa intuição pode estar errada!

Mas nós conhecemos bem de software, não tem como errarmos!

1: O que é TDD?

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

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

E aí? Depende...

2. TDD como prática de testes

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.

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.

Como prática de teste

Como prática de teste Tem vantagem?

Como prática de teste Tem vantagem? Código nasce testado

Como prática de teste Tem vantagem? Código nasce testado Menos viés na hora de testar

Como prática de teste Tem vantagem? Código nasce testado Menos viés na hora de testar Você cobre mais caminhos

Mas esse, com certeza, não foi meu foco de estudo.

3. TDD como prática de design

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.

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.

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.

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

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?

Um Estudo Qualitativo Aniche, Gerosa. How the Practice of TDD Influences Class Design in Object-Oriented Systems: Patterns of Unit Tests Feedback. SBES 2012.

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.

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.

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.

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.

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.

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.

Isso quer dizer que...

Isso quer dizer que... A busca pela testabilidade faz com que você busque projetos de classe mais simples

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

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)

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

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.

[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); } }

[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?

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..

dependencies, notifications, adjustments Freeman, Pryce. Growing Object-Oriented Software, Guided by Tests. 2009.

If s e switches Você tem testes muito parecidos que geram resultados diferentes? Quando olha a implementação, ela tem um if ou switch? " [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); }

Padrões de projeto podem ajudar (de novo)!

Métodos privados? Devo testá-los? O que isso significa?

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.

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.

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.

4. Erros comuns

Erros comuns Aniche, Gerosa. Most Common Mistakes in TDD Practice: Results from an Online Survey with Developers. 2010, ICST.

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.

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.

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.

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.

Baby Steps

Baby Steps Na minha opinião, uma das partes mais mal entendidas pela comunidade.

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).

Baby Steps

Baby Steps Não faço baby steps o tempo inteiro; mas fico feliz de saber que posso fazer, se precisar.

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!

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.

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.

5. Produtividade

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?

6. Outras maluquices

ATDD

ATDD A ideia é boa, mas...

ATDD A ideia é boa, mas... Nunca vi ninguém fazendo.

ATDD A ideia é boa, mas... Nunca vi ninguém fazendo. Os desafios são grandes.

E esse tal de BDD?

E esse tal de BDD? O pensamento BDD me agrada.

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.

7. Ensino de TDD

Como aprendo TDD?

Como aprendo TDD? Pratique.

Como aprendo TDD? Pratique. Geralmente são 2 os problemas: aprender a testar, e aprender boas práticas de programação (OO, etc).

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.

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.

Muito melhor que Crepúsculo! NY Times De tirar o fôlego! Washington Post Um thriller fascinante! Miami Herald http://www.tddnomundoreal.com.br

Alura!

http://www.codesheriff.com

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