Test-Driven Development (TDD) utilizando o framework xUnit.net

  • View
    639

  • Download
    1

Embed Size (px)

Text of Test-Driven Development (TDD) utilizando o framework xUnit.net

  1. 1. Renato Groffe Julho/2015
  2. 2. Mais de 15 anos de experincia na rea de Tecnologia Ps-graduao em Engenharia de Software nfase em SOA MBA em Business Intelligence Graduao em Sistemas de Informao Tcnico em Processamento de Dados MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT
  3. 3. Pgina no Facebook https://www.facebook.com/RenatoGroffeSW Perfil no Facebook https://www.facebook.com/renatogroff LinkedIn http://br.linkedin.com/in/renatogroffe
  4. 4. Visual Studio 2013 xUnit 2.0.0
  5. 5. Motivos que contribuem para a falta de testes Quais os impactos da falta de testes? Viso geral dos diferentes tipos de testes na rea de software Testes unitrios e a plataforma .NET TDD: conceitos gerais Implementao de um exemplo prtico Data-Driven Unit Testing Testes unitrios e o Visual Studio 2015
  6. 6. A realizao de testes muitas vezes negligenciada: Falta de planejamento Tempo escasso Equipes reduzidas e sobrecarregadas, trabalhando simultaneamente em vrios projetos Falta de hbito Excesso de confiana de alguns profissionais
  7. 7. Retrabalho Custos que excedem o oramento Conflitos entre membros de uma equipe tcnica ou junto rea de negcios Prejuzos imagem da equipe ou empresa responsvel por um projeto
  8. 8. Garantir que o produto atende aquilo que foi especificado para o projeto Verificao do correto funcionamento de uma aplicao Deteco de falhas e defeitos que poderiam passar em branco at a subida em Produo
  9. 9. Teste de unidade (ou teste unitrio): verificao das menores unidades (mtodo, classe, objeto) em um software, a fim de determinar a lgica de uma estrutura sob anlise Teste de integrao: anlise do funcionamento em conjunto das diferentes partes que compem uma aplicao Teste de sistema: simulao de uma situao real, em um ambiente equivalente ao de Produo Teste de aceitao: conduzidos por um grupo de usurios finais com o intuito de simular operaes cotidianas Teste de regresso: verifica se mudanas introduzidas em uma verso resultam em efeitos colaterais nas funcionalidades pr-existentes
  10. 10. So caractersticas comumente atribudas aos testes unitrios: So automatizados e repetveis Podem ser implementados facilmente Uma vez escritos, os testes devem ser mantidos para reuso futuro Qualquer profissional envolvido com o desenvolvimento de uma aplicao deve ser capaz de execut-los Facilmente acionveis, com isto acontecendo a partir de um boto ou item de menu dentro de uma IDE Rapidez na execuo
  11. 11. Assim como as principais plataformas da atualidade, o .NET Framework conta com diversas alternativas para a implementao de testes unitrios: Visual Studio Unit Testing Framework (MS Test) NUnit (http://www.nunit.org/) xUnit.net (https://github.com/xunit) possvel integrar a utilizao destes frameworks ao processo de build de uma aplicao O Team Foundation um bom exemplo de soluo que suporta este tipo de funcionalidade
  12. 12. Criando um novo projeto de testes unitrios:
  13. 13. O menu TEST
  14. 14. Executando os testes definidos em uma classe
  15. 15. A janela Test Explorer e o resultado da execuo de testes unitrios
  16. 16. O uso do framework xUnit.net requer: A criao de um novo projeto de testes Referenciar a aplicao que ser submetida a testes neste novo projeto A instalao de packages para a codificao de testes e execuo dos mesmos na IDE A criao de classes que contero os testes A definio de mtodos para checagens nessas classes de testes, com estes ltimos sendo marcados com os atributos Fact ou Theory e fazendo uso de funes definidas na classe Assert
  17. 17. Packages do xUnit.net em um projeto de testes (xUnit.net e xUnit.net [Runners])
  18. 18. Um pouco mais sobre a classe Assert: Definida no namespace Xunit Caso uma checagem produza como resultado o valor false, considera-se que o teste em questo gerou um erro Alguns dos mtodos disponibilizados por este tipo: Equal, NotEqual, False, True, Null e NotNull
  19. 19. Desenvolvimento baseado na codificao de testes unitrios Abordagem que tem incio em 2002, com a publicao do livro Test-Driven Development: By Example por Kent Beck (pai do XP - Extreme Programming) SUT (System Under Test) ou CUT (Class Under Test ou Code Under Test) alguns termos comuns dentro de TDD
  20. 20. Construo de solues de uma maneira que facilite a integrao a ferramentas para a execuo de testes unitrios Codificao de testes unitrios antes mesmo da implementao das partes que sero submetidas a anlises evitando assim a elaborao de testes viciados
  21. 21. A implementao de uma funcionalidade segue um ciclo conhecido como Red-Green-Refactor (com a execuo dos testes unitrios em todos os estgios)
  22. 22. Teste elaborado antes mesmo da funcionalidade ter sido codificada (apenas a estrutura bsica foi definida), de forma a se evitar uma verificao viciada Exemplo de definio de classe com funcionalidades ainda no implementadas
  23. 23. Teste unitrio criado criado com o framework xUnit.net
  24. 24. Funcionalidade codificada da forma mais simples possvel, de maneira a garantir a execuo com sucesso dos testes Exemplo anterior com funcionalidades j implementadas
  25. 25. Eliminao de instrues duplicadas e eventuais melhorias no cdigo Exemplo de classe refatorada
  26. 26. Cdigo mais claro, j que os testes so escritos com o objetivo de checar pores menos extensas de um projeto Testes unitrios podem ser encarados como uma forma de se documentar o cdigo entendimento de como o mtodo ou classe funciona Um rpido feedback, com a gerao de alertas diante de eventuais problemas algo extremamente importante ao se efetuarem testes de regresso Uma maior cobertura de diferentes trechos de cdigo, o que poderia no acontecer com outros tipos de testes Falhas so apontadas durante o desenvolvimento, economizando assim tempo e recursos financeiros
  27. 27. Ao buscar um cdigo mais simples e de fcil manuteno, a adoo de TDD acaba por favorecer uma melhor assimilao de boas prticas de desenvolvimento/arquitetura de software: Separao de Responsabilidades (ao isolar a lgica de negcios ou de acesso a dados das camadas de visualizao de uma aplicao) Maior coeso (evitando a implementao de classes faz-tudo) Menor acoplamento (a simplificao do cdigo visando a escrita de testes eficazes contribui para uma menor dependncia entre diferentes partes de uma aplicao)
  28. 28. Converso de temperatura Escala Fahrenheit para Celsius: Classe a ser criada: C = (F 32) / 1,8 Casos de teste (considerar 2 casas decimais para arredondamento):
  29. 29. Link para download da soluo de exemplo: https://gallery.technet.microsoft.com/Test-Driven-Development-2aad5383
  30. 30. Cada caso de teste possui um mtodo correspondente duplicao de cdigo (ao menos para este exemplo especfico) Casos de teste adicionais exigiro a implementao de novos mtodos para cada situao
  31. 31. Mtodos parametrizados, com a utilizao de mecanismos para prover os valores a serem testados xUnit.net Mtodos marcados com o atributo Theory O atributo InlineData utilizado para a especificao de valores, estando associado a um mtodo de teste
  32. 32. Ajustando a classe de testes para que utilize os atributos Theory e InlineData o resultado ser:
  33. 33. IntelliTest Novo recurso que permite a gerao automtica de casos de testes a partir do Visual Studio 2015 Anteriormente conhecido como Smart Unit Tests
  34. 34. Quando aplicar TDD? Testando todas as funcionalidades da aplicao, sem excees? Considerando apenas funcionalidades mais significativas do ponto de vista do negcio?
  35. 35. Dvidas, sugestes???
  36. 36. Testes unitrios com o framework xUnit.net http://social.technet.microsoft.com/wiki/pt- br/contents/articles/31395.testes-unitarios-com-o-framework- xunit-net.aspx Novos recursos do Visual Studio 2015: Smart Unit Tests http://netcoders.com.br/blog/visual-studio-2015-smart-unit- tests/ Test-Driven Development http://martinfowler.com/bliki/TestDrivenDevelopment.html Unit Test http://martinfowler.com/bliki/UnitTest.html
  37. 37. Obrigado!!!