Apresentação de TDD na Fatec Jundiaí

Preview:

DESCRIPTION

Apresentação de introdução ao TDD - Test Driven-Development realizada na Fatec Jundiaí.

Citation preview

Fatec - Jundiaí09/04/2009

Introdução ao Test-Driven Development

Test-Driven Development

“Escreva código novo apenas se você primeiro tiver um teste falhando.”

Kent Beck

Por que testar?

• Não existe software sem erros• Aumenta a qualidade do software• Evita retrabalho

Modelo Waterfall

Test-Driven Development

• Test-first• Design incremental

Test-first

Escrever testes antes da implementação:

• Faz você pensar no comportamento• Reduz código especulativo• Documenta• Aumenta a qualidade

Design incremental

• Adição de novas funcionalides em pequenos passos

• O conceito chave de TDD é ter um feedback rápido das mudanças no código

Test-Driven Development

• TDD é mais sobre design de software do que testes

Test-Driven Development

“Está pronto, só falta testar.”

• Usando TDD, quando acabamos, realmento acabamos.

Eu não quero usar TDD…

As 5 maiores desculpas para quem não quer desenvolver orientado a testes:

• Vai demorar muito mais• A funcionalidade é muito fácil• Não sei como testar• Isso não dá para testar• Melhor deixar os testes com os

testadores

Eu não quero usar TDD…

“Você não tem tempo para escrever testes unitários, porque gasta tempo demais debugando.”

Processo para usar TDD

• Lista de testes• Red/Green/Refactor

Red/Green/Refactor

Refatoração

• Melhora e aperfeiçoamento do código existente sem alterar o seu comportamento externo.

Passos para criação de testes

• Escreva um teste• Compile o teste (ele não deverá compilar, pois não

implementou nada ainda)• Implemente somente o suficiente para compilar• Rode o teste e veja-o falhar• Implemente somente o suficiente para o teste passar• Rode o teste e veja-o passar• Refatore para “limpar” e remover duplicação de código

(implementação e teste)• Rode o teste e veja-o passar• Repita desde o primeiro passo.

Ferramentas para testes de unidade

• .NET: MSTest (Visual Studio), NUnit• Java: JUnit, Jtest• Ruby: Test::Unit• Python: PyUnit• PHP: PHPUnit, SimpleTest• JavaScript: JSUnit

Exemplo – Calculadora

Lista de testes:• Somar dois números inteiros• Subtrair dois números inteiros• Multiplicar dois números inteiros• Dividir dois números inteiros• ...

Exemplo – Calculadora

Lista de testes:• Somar dois números inteiros• Subtrair dois números inteiros• Multiplicar dois números inteiros• Dividir dois números inteiros• ...

Teste

[TestMethod]

public void Soma_Dois_Numeros()

{

Calculadora c = new Calculadora();

int resultado = c.Soma(10, 10);

Assert.AreEqual(20, resultado);

}

Implementação

Exemplo – Calculadora

Teste

[TestMethod]

public void Soma_Dois_Numeros()

{

Calculadora c = new Calculadora();

int resultado = c.Soma(10, 10);

Assert.AreEqual(20, resultado);

}

Implementação

public class Calculadora

{

public int Soma(int num1, int num2)

{

return 0;

}

}

Exemplo – Calculadora

Exemplo – Calculadora

Teste

[TestMethod]

public void Soma_Dois_Numeros()

{

Calculadora c = new Calculadora();

int resultado = c.Soma(10, 10);

Assert.AreEqual(20, resultado);

}

Implementação

public class Calculadora

{

public int Soma(int num1, int num2)

{

int soma = num1 + num2;

return soma;

}

}

Exemplo – Calculadora

Exemplo – Calculadora

Teste

[TestMethod]

public void Soma_Dois_Numeros()

{

Calculadora c = new Calculadora();

int resultado = c.Soma(10, 10);

Assert.AreEqual(20, resultado);

}

Implementação

public class Calculadora

{

public int Soma(int num1, int num2)

{

int soma = num1 + num2;

return soma;

}

}

Exemplo – Calculadora

Teste

[TestMethod]

public void Soma_Dois_Numeros()

{

Calculadora c = new Calculadora();

int resultado = c.Soma(10, 10);

Assert.AreEqual(20, resultado);

}

Implementação

public class Calculadora

{

public int Soma(int num1, int num2)

{

return num1 + num2;

}

}

Exemplo – Calculadora

Exemplo – Calculadora

Exemplo – Calculadora

Exemplo 2 – Music Player

Lista de testes:• Criar uma instância de MusicPlayer

e verificar se a propriedade AutoStart é falsa por padrão;

• Verificar se propriedade IsPlaying é verdadeira quando um arquivo de música for configurado e AutoStart for verdadeiro;

• ...

Exemplo 2 – Music Player

Lista de testes:• Criar uma instância de MusicPlayer

e verificar se a propriedade AutoStart é falsa por padrão;

• Verificar se propriedade IsPlaying é verdadeira quando um arquivo de música for configurado e AutoStart for verdadeiro;

• ...

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

Implementação

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

Implementação

public class MusicPlayer

{

public bool AutoStart

{

return true;

}

}

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

Implementação

public class MusicPlayer

{

public bool AutoStart

{

return false;

}

}

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

[TestMethod]

public void Configura_Musica_Com_AutoStart()

{

MusicPlayer mp = new MusicPlayer();

mp.AutoStart = true;

mp.SetMusic(@"C:\musica.mp3");

Assert.IsTrue(mp.IsPlaying);

}

Implementação

public class MusicPlayer

{

public bool AutoStart

{

return false;

}

}

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

[TestMethod]

public void Configura_Musica_Com_AutoStart()

{

MusicPlayer mp = new MusicPlayer();

mp.AutoStart = true;

mp.SetMusic(@"C:\musica.mp3");

Assert.IsTrue(mp.IsPlaying);

}

Implementação

public class MusicPlayer

{

private bool autoStart;

private bool isPlaying;

public bool AutoStart

{

get { return autoStart; }

set { autoStart = value; }

}

public bool IsPlaying

{

get { return isPlaying; }

set { isPlaying = value; }

}

public void SetMusic(string path)

{

}

}

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

[TestMethod]

public void Configura_Musica_Com_AutoStart()

{

MusicPlayer mp = new MusicPlayer();

mp.AutoStart = true;

mp.SetMusic(@"C:\musica.mp3");

Assert.IsTrue(mp.IsPlaying);

}

Implementação

public class MusicPlayer

{

private bool autoStart;

private bool isPlaying;

public bool AutoStart

{

get { return autoStart; }

set { autoStart = value; }

}

public bool IsPlaying

{

get { return isPlaying; }

set { isPlaying = value; }

}

public void SetMusic(string path)

{

IsPlaying = true;

}

}

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Teste

[TestMethod]

public void Instancia_Music_Player()

{

MusicPlayer mp = new MusicPlayer();

Assert.IsFalse(mp.AutoStart);

}

[TestMethod]

public void Configura_Musica_Com_AutoStart()

{

MusicPlayer mp = new MusicPlayer();

mp.AutoStart = true;

mp.SetMusic(@"C:\musica.mp3");

Assert.IsTrue(mp.IsPlaying);

}

Implementação

public class MusicPlayer

{

private bool autoStart;

private bool isPlaying;

public bool AutoStart

{

get { return autoStart; }

set { autoStart = value; }

}

public bool IsPlaying

{

get { return isPlaying; }

set { isPlaying = value; }

}

public void SetMusic(string path)

{

IsPlaying = true;

}

}

Exemplo 2 – Music Player

Teste

MusicPlayer mp = new MusicPlayer();

[TestMethod]

public void Instancia_Music_Player()

{

Assert.IsFalse(mp.AutoStart);

}

[TestMethod]

public void Configura_Musica_Com_AutoStart()

{

mp.AutoStart = true;

mp.SetMusic(@"C:\musica.mp3");

Assert.IsTrue(mp.IsPlaying);

}

Implementação

public class MusicPlayer

{

private bool autoStart;

private bool isPlaying;

public bool AutoStart

{

get { return autoStart; }

set { autoStart = value; }

}

public bool IsPlaying

{

get { return isPlaying; }

set { isPlaying = value; }

}

public void SetMusic(string path)

{

IsPlaying = true;

}

}

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Exemplo 2 – Music Player

Test-Driven Development

“Escreva código novo apenas se você primeiro tiver um teste falhando.”

Kent Beck

Obrigado

Prodis’ Blog http://prodis.pro.bro