TDD - Test Driven Development

  • View
    2.754

  • Download
    1

Embed Size (px)

DESCRIPTION

TDD - Test Driven Development. Apresentação de trabalho no curso de pós graduação em Engenharia de Software Centrada em Métodos Ágeis

Text of TDD - Test Driven Development

  • TDD Desenvolvimento dirigido por testesTimeAdler ParnasDaniel MendesDigo NunesMarcelo Lima BicalhoMarcos PauloSirlan Augusto MoraesWalmir Rocha

  • TDD Desenvolvimento dirigido por testesTpicosIntroduo1.1 O que um teste?1.2 O que TDD?1.3 Como Funciona o TDD?1.4 O Ciclo do TDD1.5 RefatorarBenefcios do TDDMitos e equvocosProcesso de criao de um testeA teoria na prtica Algumas tcnicasBoas prticasConclusoReferncias

  • TDD Desenvolvimento dirigido por testesO que um teste? Teste um mtodo que contm asseres segundo o dicionrio Houaiss, assero significa "afirmao categrica" e que representam um cenrio de testes em particular. Um teste s passar caso todas as asseres sejam verdadeiras.1.1 Teste

  • TDD Desenvolvimento dirigido por testesTest-Driven Development (TDD) ou Desenvolvimento Orientado a Testes.Tem origem do conceito XP (Extreme Programming) test-first development [Beck 2003]Processo de pequenas iteraes para programar novas funcionalidadesAuxilia a detalhar o requisito antes da implementao do cdigo.1. 2 O que TDD?

  • TDD Desenvolvimento dirigido por testesReduz custo de desenvolvimento e retrabalho, atravs de refactoring.Resulta em cdigos mais limpos e menos complexosTorna os softwares com mais qualidades e de melhor manuteno.No um mtodo para testar software, mas para construir software1. 2 O que TDD?

  • TDD Desenvolvimento dirigido por testesQuebrar a abordagem tradicional de testes de softwareTesta antes de construir enquanto mtodos tradicionais constroem antes para testar.1. 2 O que TDD?

  • TDD Desenvolvimento dirigido por testes1. 3 Como Funciona o TDD?Antes de comear a desenvolver o sistema, pense nas suas funes e escreva um teste que usara os mtodos que voc ainda nem implementou.Para que o teste antes do desenvolvimento? Assim voc cobrira praticamente todo seu sistema com cdigo de testes, porque voc criara apenas cdigos que so usados pelos testes e eles so executados repetidamente todo o tempo durante todo o processo de desenvolvimento.

  • TDD Desenvolvimento dirigido por testes1. 4 O Ciclo do TDDComece com um teste que no compila porque o mtodo que voc est testando ainda no existe.Escreva o mnimo de cdigo para que ele compile criando o mtodo sem implementao por exemplo.Compile o teste. Veja ele falhar.Implemente o cdigo.Execute o teste. Veja o teste passar.Melhore o cdigo (refactoring).Execute o teste para certificar-se que tudo continua funcionando.

  • TDD Desenvolvimento dirigido por testes1. 5 RefatorarRefatorar o processo de alterar e otimizar o cdigo de maneira que seu comportamento externo no seja alterado.Em cdigo que est funcionando no se mexe? TDD permite que este medo deixe de ter fundamento, pois ele atua como uma rede de segurana, capturando qualquer bug que seja inserido durante a refatorao.

  • TDD Desenvolvimento dirigido por testes2 . Benefcios do TDDRequisitos mais detalhadosCodificar apenas o necessrioReduz o acoplamento entre classesDeixa claro o comportamento do sistemaIncentiva a refatoraoConfiana no cdigoSoftware com mais qualidade

  • 3 . Mitos e equvocosEscrever testes aps a codificao a mesma coisaTDD sobre testes de softwareTDD torna lento o desenvolvimento

    TDD Desenvolvimento dirigido por testes

  • TDD Desenvolvimento dirigido por testes4 . Processo de criao de um teste

  • TDD Desenvolvimento dirigido por testes4 . Processo de criao de um testeEscreva um teste que falhe. Pense em que o cdigo deve fazer e defina quais verificaes devem ser feitas.Crie o cdigo necessrio para que o teste compile e falheFaa o teste passar.Escreva o mnimo de cdigo para que o teste passe.

  • TDD Desenvolvimento dirigido por testes4 . Processo de criao de um testeRefatoreMelhore o cdigo, lembrando que o teste deve continuar passando

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasFake itEscreva um teste que falhe. Para faz-lo passar, utilize constantes. V escrevendo novos testes e gradualmente substituindo as constantes por variveis.Esta tcnica aumenta a confiana, pois teremos vrios testes para provar que a implementao est funcionando.

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicas

    StubsSo classes que simulam o comportamento de classes mais complexas atravs de uma implementao simples.Com eles possvel isolar a classe testada do resto do sistema, simplificando os testes e deixando-os mais independentes.

  • TDD Desenvolvimento dirigido por testes

    Mock Objects uma abordagem similar aos Stubs. A diferena entre eles :Com stubs, nos preocupamos em testar o estado dos objetos aps a execuo do mtodo..Com mocks, a preocupao testar a interao entre objetos durante a execuo do mtodo. Neste caso.

    5 . Algumas tcnicas

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasTeste de Unidade:Testam a aplicao em seus menores componentes, isoladamenteTestam unidades lgicasMtodosObjetosMaior nmero de erros detectadosErros mais fceis de corrigir Devem ser executados continuamente

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasTeste de Integrao:Testam como uma coleo de unidades interage entre si ou com o ambiente onde executam

    Executados continuamente (caso as unidades em desenvolvimento dependam de outras)

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasTeste Funcionais:Ponto de vista do usurioTestam casos de usoValidam a interface com o usurio, as operaes requisitadas, etc.So menos estveis do que os outros tipos

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasDo que precisamos para comear?Um ferramenta que nos auxilie a desenvolver e testar nossos testes de unidade

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasExistem alguns frameworks de apoio que fornecem classes que facilitam a escrita e execuo dos testes:.Net Framework (C#, VB.NET, Delphi.NET)NUnit (www.nunit.org)MbUnit (www.mbunit.org/)JUnit (Java)DUnit (Delphi Win32)xUnit (www.xprogramming.com/software.htm)Fceis de aprender

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasUm framework para construo / execuo de testes de unidade em JavaComo funciona?Criamos uma classe e escrevemos um conjunto de mtodos contendo verificaesCada verificao avalia se o comportamento do cdigo sendo testado o esperadoExemplo: se o resultado de um mtodo que realizada a soma de 3 + 4 igual a 7.

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasComo funciona? (cont.)Requisitos que um teste deve atender:Cada mtodo de teste deve possuir a anotao @TestQuando for fazer uma assero dentro do mtodo, utilizar um conjunto de mtodos disponibilizados pelo JUnit; entre eles:assertTrue, assertFalse, assertSame, assertNull, assertNotNull, Esses mtodos devem ser importados estaticamente de org.junit.Assert.*

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasSeja a seguinte classe:public class Calculadora {

    public int somar(int a,int b) {return a + b;}}

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasSeja um teste para a classe Calculadora:...import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertTrue;

    public class MeuPrimeiroTeste {@Test public void somar() {Calculadora calc = new Calculadora();assertTrue( calc.somar(3,45) == 48 );assertEquals( 9, calc.dividir(18,2) );}...@Test public void ...}

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasOutras anotaes que tambm podem ser utilizadas em um mtodo de teste:@Before@After@BeforeClass@AfterClass@Test (expected=Exception.class)@Test (timeout=int)@Ignore

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasExemplo:...@Test(expected=DivisaoPorZeroException.class) public void dividirPorZero() {int n = 2 / 0; }@Before public void zerarConta() { conta = new Conta(); } @After public void fecharConexao() { conexao.close(); } ...

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasComentrios importantesquando testamos, no podemos ter pena do cdigoo cliente no ter!precisamos esquecer um pouco do nosso afeto ao beb!!!precisamos testar:entradas erradas / inconsistentes / nulasprecisamos avaliar todas as facetas do cdigo!!!Idealmente, monte um fluxograma contendo tudo a ser testado!

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasLembrem que da mesma forma que queremos nosso cdigo limpo, nossos testes tambm devem estarCdigo limpo mais fcil de entenderUm teste seguindo boas prticas de programao fica mais claro, permite testar mais com menos linhas de cdigo

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasComo rodamos um teste?Precisamos executar o TestRunnerexecuta todos os mtodos que possuem a anotao @Testse existir um mtodo com a anotao @Before/@After, ele ser executado antes/depois de cada testese existir um mtodo com a anotao @BeforeClass/@AfterClass, ele ser executado no incio/final do teste (s ser executado uma vez)

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasUsando linha de comando:java -cp junit-4.4.jar;. junit.swingui.Test MeuTest

  • TDD Desenvolvimento dirigido por testes5 . Algumas tcnicasPergunta: quando escrever os testes?Escrever o cdigo todo e depois testar?Escrever o cdigo e testar ao mesmo tempo?Escrever os testes e depois codificar?!?

  • TDD Desenvolvimento dirigido por testes6 . Boas prticasAnalise o comportamento e no a implementaoDeixe o compilador lhe dizer:

    public void testEmptyListSize() { MovieList emptyList = new MovieList(); assertEquals("Size should be 0.",0,emptyList.size()); }MovieList cannot be resolved or is not a type.

    public class MovieList {}The method size() is undefined fo