Apresentação de TDD na Fatec Jundiaí
-
Upload
fernando-hamasaki-de-amorim -
Category
Technology
-
view
1.910 -
download
2
description
Transcript of Apresentação de TDD na Fatec Jundiaí
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