Pensando TDD

Preview:

DESCRIPTION

Uma reflexão sobre desenvolvimento de software, qualidade e como o TDD pode nos ajudar a melhorar em tudo isso. A versão em PPT, que possui comentários adicionais para cada Slide, pode ser baixada no Google Drive: https://drive.google.com/folderview?id=0B4k-4pdeaM58SEpYcHZSbFdoS0E&usp=sharing Para maiores informações sobre a palaestra, acesse: http://luizricardo.org/2014/10/pensando-tdd/ ‎

Citation preview

Pensando TDD

08/10/2014

Direitos Autorais

Você está autorizado e incentivado a distribuir este material.

Copie, compartilhe e modifique, apenas cite a fonte.

Autoria

Luiz Ricardo

luizricardo.orgfacebook.com/StateOfTheArtBlog

Código-fonte

O código dos exemplos práticos pode ser obtido no link:

https://github.com/utluiz/tdd-example

Porque software?

$$$???

Software de Qualidade

Faz o que deveria fazer

SEM ERROS

Software de Qualidade

Funciona

Dificuldades do Software

Sem representação visível

Dificuldade em identificar requisitos

Abstrato

Dificuldades do Software

Singular

Cada um é diferente

Dificuldades do Software

Mutável

1 bit muda tudo

Dificuldades do Software

Complexo

Simplificação

Perda de informação

Expectativa Realidade

Como fazer software de qualidade?

Teste Teste

Teste

Teste

Teste

TDD

Metodologia ágil de desenvolvimento de software

cujo objetivo é gerarcódigo limpo que funciona

Test-Driven Development

Fases do Desenvolvimento

Tradicional

Projeto

Implementação

Teste

Mudanças acontecem...

Abrace-as!

Correção de Bugs

Design Implementação Teste Manutenção

Custo por fase

Fases do Desenvolvimento

TDD

Projeto/Teste

Implementação

Definição de “Pronto”

Quando terminamos uma nova funcionalidade?

Definição de “Pronto”

Código

Definição de “Pronto”

Código limpo

Definição de “Pronto”

Código limpo

Testado

Definição de “Pronto”

Código limpo

Teste automatizado

Definição de “Pronto”

Código limpo

Teste automatizado

Deploy automatizado

Definição de “Pronto”

Código limpo

Teste automatizado

Deploy automatizado

Documentado

Ciclo de Vida do TDD

Vermelho

VerdeRefatore

Ciclo de Vida do TDD

Vermelho, verde, refatore

Vermelho, verde, refatore

Vermelho, verde, refatore

Vermelho, verde, refatore

...

O “Mantra”

Ciclo de Vida do TDD

Vermelho

VerdeRefatore

1. Escreva um teste que falhe

Ciclo de Vida do TDD

Vermelho

VerdeRefatore

1. Escreva um teste que falhe

2. Façafuncionar

Ciclo de Vida do TDD

Vermelho

VerdeRefatore

1. Escreva um teste que falhe

2. Façafuncionar

3. Faça direito

Ciclo de Vida do TDD

VerdeRefatore

Por que separar?

Faça funcionarFaça direito

Ciclo de Vida do TDD

Valores do TDD

• Foco na qualidade

• Código “documentado”

• Sem medo de mudanças

Só mais uma coisa...

Dificuldades do TDD

• Qualidade tem custo

• Indefinição

• Design ruim

Desenvolvimento de Software

Metáforas

Desenvolvimento de Software

Amador ou Artesão?

Princípios de Design OO

Single Responsibility Principle

Open/close principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

S.O.L.I.D.

Testando... 1, 2, 3

Testes unitários

Testa uma porção individual do código, como uma função,

método ou classe.

Testando... 1, 2, 3

Asserções

Verificações de

pré e pós-condições do teste

Testando... 1, 2, 3

Objetos Mock

Objetos usados em testes que simulam o funcionamento de

um objeto real

Testando... 1, 2, 3

Integração

Carga

Estresse

Desempenho

Tipos de teste

Resiliência

Aceitação

Cobertura

Regressão

Ferramentas

• Teste unitário

JUnit, TestNG

• Teste de integração (web)

Selenium/Web Driver, HtmlUnit, UFT/QTP

• Mocks

Mockito, JMock, PowerMock, EasyMock

Plataforma Java

Ferramentas

• Teste de cobertura

EclEmma

Plataforma Java

Prática

• Testes unitários

– Calculadora com JUnit

• Teste web

– Pesquisa no Google com WebDriver (Internet)

– Navegação entre duas páginas

Demonstração

Conclusões

• Não é uma solução mágica

• TDD não é sobre TDD

• TDD é um exercício diário

• TDD é disciplina

Test-Driven Development

Pratique!

Não tenha medo...

Perguntas?