• Nenhum resultado encontrado

TDD depois do mainstream. E agora?

N/A
N/A
Protected

Academic year: 2021

Share "TDD depois do mainstream. E agora?"

Copied!
84
0
0

Texto

(1)
(2)
(3)

Nós

amamos

métodos ágeis

(4)
(5)

Mas tudo faz sentido...

Será que vale a pena

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

(7)

Nossa

intuição

(8)

Mas nós

conhecemos

bem de software, não

(9)
(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

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

(12)
(13)
(14)

TDD como

prática de testes

Quando o desenvolvedor pratica TDD com

(15)

A academia gosta disso...

(16)
(17)

Como prática de teste

(18)

Como prática de teste

Tem vantagem?

(19)

Como prática de teste

Tem vantagem?

Código “nasce testado”

(20)

Como prática de teste

Tem vantagem?

Código “nasce testado”

Menos viés na hora de testar

(21)

Mas esse, com certeza,

não

foi meu foco de

(22)
(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,

(24)

A academia estudou

isso também...

(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

(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

(27)

Mas como descobrir?

Uma das partes mais desafiadores (e

legais!) da ciência é justamente essa: como bolar um experimento controlado que

(28)

Um Estudo Qualitativo

(29)

Um Estudo Qualitativo

~30 desenvolvedores da indústria

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

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

(32)

a prática de TDD

não guia o

desenvolvedor para um bom

projeto de classes

de forma

automática!

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

(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

(35)
(36)

Isso quer dizer que...

A busca pela testabilidade faz com que você

(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

(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,

(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

(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á

(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);

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

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

(44)

dependencies,

notifications,

adjustments

(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

(46)
(47)

Métodos privados?

Devo testá-los?

(48)

Olhando pros asserts

A quantidade de asserts também pode

indicar problemas de qualidade no código de produção.

(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”);

(50)

Padrões de Feedback

(51)
(52)

Erros comuns

(53)

Erros comuns

45% dos desenvolvedores disseram que

esquecem de refatorar constantemente.

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

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

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

(57)
(58)

Baby Steps

Na minha opinião, uma das partes mais mal

(59)

Baby Steps

Na minha opinião, uma das partes mais mal

entendidas pela comunidade.

Ser simples, não é ser simplório (e nem

(60)
(61)

Baby Steps

Não faço baby steps o tempo inteiro; mas

(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

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

(64)

Qual a diferença de

escrever o teste antes?

Fazendo ou não TDD, eu faço ciclos

pequenos.

(65)
(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?

(67)
(68)
(69)
(70)

ATDD

A ideia é boa, mas...

(71)

ATDD

A ideia é boa, mas...

Nunca vi ninguém fazendo.

(72)
(73)

E esse tal de BDD?

(74)

E esse tal de BDD?

O pensamento BDD me agrada.

As ferramentas que “implementam” não.

(75)
(76)
(77)

Como aprendo TDD?

(78)

Como aprendo TDD?

Pratique.

Geralmente são 2 os problemas: aprender a

(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

(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

(81)

“Muito melhor

que Crepúsculo!”

NY Times

http://www.tddnomundoreal.com.br

“De tirar o fôlego!”

Washington Post

(82)
(83)
(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

Referências

Documentos relacionados

pesquisa e outros trabalhos pelo respectivo Departamento; b) aprovação do pedido de DE pelo Conselho Departamental, e pela COPAD; c) cadastramento e avaliação de linhas de pesquisa e

Faça também uma descrição técnica do produto. Separe esta parte para dar todas as informações possíveis sobre o material. Aqui sim, você pode colocar os números e

Só na ilha Terceira durante os 12 anos de governação do Partido Socialista (até ao final da legislatura) serão intervencionados mais km de estradas regionais do que os governos do

Em agosto, na segunda etapa da luta, será importante que todos estejam foca- dos na construção da greve, que se mos- trou eficaz e nos colocou em condições efetivas de barrar a PEC

[r]

elementos de dados necessários para descrever, recuperar e controlar várias formas de material bibliográfico no Pergamum, tais como: livros, periódicos, arquivos

Bibliográfico (Formato): Contém especificações de formato para codificação de elementos de dados necessários para descrever, recuperar e controlar várias formas

Com relação aos tipos de objetivos pretendidos no estudos, destacaram-se os seguintes temas: significado da experiência ou vivência do aleitamento materno, conhecimento