Test-Driven Develpment - TDD

27
Test-Driven Development TDD

description

Apresentação sobre o TDD: * Introdução * Conceitos * Aplicabilidade * Ferramentas

Transcript of Test-Driven Develpment - TDD

Page 1: Test-Driven Develpment - TDD

Test-Driven Development

TDD

Page 2: Test-Driven Develpment - TDD

Sumário Manifesto Ágil

O que é?

Ciclo do TDD

Vantagens

Aplicabilidade

APIs e Sistemas

Bugfixes

Sistemas Legados

Ferramentas para Testes

Caso de Uso com TDD

Bibliografia Recomendada

Page 3: Test-Driven Develpment - TDD

Manifesto Ágil

Indivíduos e interações > Processos e ferramentas

Software em funcionamento > Documentação abrangente

Colaboração com o cliente > Negociação de contratos

Resposta a mudanças > Seguir um plano

Page 4: Test-Driven Develpment - TDD

O que é?

“Escrever os testes para o código antes de escrever o

código em si”

É comum no desenvolvimento ágil

Pode ser usada em qualquer tipo de desenvolvimento, até

em pesquisas

Desenvolvimento como um processo de Aprendizado

Page 5: Test-Driven Develpment - TDD

O que é?

Princípios do TDD – F.I.R.S.T. Principles:

Fast – Testes devem ser executados em < 1 segundo

Isolated – Falhas são claramente isoladas

Repeatable – Comportamento constante

Self-verifying – Passa ou Falha

Timely – 1 mudança de código = 1 teste

Page 6: Test-Driven Develpment - TDD

Ciclo do TDD

Page 7: Test-Driven Develpment - TDD

Vantagens

Antecipa o comportamento do código

Reduz os custos de desenvolvimento e de

manutenção

Educa o programador a pensar e criar códigos

“limpos”

Componentes livremente acoplados

Desestimula recursos desnecessários

Page 8: Test-Driven Develpment - TDD

Vantagens

Desenvolvimento como um processo de

aprendizado

Aperfeiçoamento do código: Refatoração

Foco na aceitação, integração e unidade

Blindagem do código

Combate a Síndrome Nostradamus

Page 9: Test-Driven Develpment - TDD

Aplicabilidade

Se livrando de Bugs:

Relatório de Bug

Teste que reproduz o Bug: Fail

Correção do Bug

Execução do teste: Pass

9

Page 10: Test-Driven Develpment - TDD

Aplicabilidade

Sistemas Legados

Funcionalidade Duvidosa: ???

Escreva um teste para ver se você entendeu: Fail

Adapte o teste (iterativamente)

Execução do teste: Pass

Cuidado, Vá devagar

Esteja preparado para desfazer as mudanças

10

Page 11: Test-Driven Develpment - TDD

Aplicabilidade

Testes servem como documentação

Auxilia no design

Se adapta a qualquer metodologia de

desenvolvimento de software

11

Page 12: Test-Driven Develpment - TDD

Ferramentas para Testes

JUnit – Java

NUnit, MsTest – .NET

PyUnit – Python

Perl – Test::More

PHPUnit – PHP

Test::Unit – Ruby

Test.More – Javascript

12

Page 13: Test-Driven Develpment - TDD

Caso de Uso com TDD

Como usuário eu gostaria de me cadastrar

fornecendo: nome, email, senha, confirmação

Condição:

O usuário deve possuir uma senha válida

Ação:

Verificar se a confirmação da senha é válida, senão

enviar mensagem de erro adequada

13

Page 14: Test-Driven Develpment - TDD

Caso de Uso com TDD

14

Criando o Teste Falho

Page 15: Test-Driven Develpment - TDD

Caso de Uso com TDD

15

Implementado

Page 16: Test-Driven Develpment - TDD

Caso de Uso com TDD

16

Teste Passa

Page 17: Test-Driven Develpment - TDD

Caso de Uso com TDD

17

Adicionando novas Falhas

Page 18: Test-Driven Develpment - TDD

Caso de Uso com TDD

18

Implementação

Page 19: Test-Driven Develpment - TDD

Caso de Uso com TDD

19

Teste Passa

Page 20: Test-Driven Develpment - TDD

Caso de Uso com TDD

20

Caso de uso ainda incompleto

Page 21: Test-Driven Develpment - TDD

Caso de Uso com TDD

21

Nova implementação

Page 22: Test-Driven Develpment - TDD

Caso de Uso com TDD

22

Teste Passa

Page 23: Test-Driven Develpment - TDD

Caso de Uso com TDD

23

Nova Falha – Refatoração

Page 24: Test-Driven Develpment - TDD

Caso de Uso com TDD

24

Implementação

Page 25: Test-Driven Develpment - TDD

Caso de Uso com TDD

25

Teste Passa: Fim de Caso de Uso

Page 26: Test-Driven Develpment - TDD

Bibliografia Recomendada

TDD – Desenvolvimento Guiado por Testes. Kent Beck

Desenvolvimento de Software Orientado a Objetos,

Guiado por Testes. Steve Freeman, Nat Pryce.

Professional Test Driven Development with C#. James

Bender, Jeff McWherter

Código Limpo (Clean Code): Habilidades Práticas do

Agile Software. Robert C Martin