O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

TDD (Test-Driven Development)

2.981 visualizações

Publicada em

Apresentação sobre TDD(Test-Driven Development) realizada em 18/04/2013.

Tópicos abordados:
- Motivos que contribuem para a falta de testes
- Quais os impactos da falta de testes?
- Visão geral dos diferentes tipos de testes na área de software
- Testes unitários e a plataforma .NET
- TDD: conceitos gerais
- Implementação de um exemplo prático
- Testes unitários e o Visual Studio 2015

Publicada em: Software
  • Seja o primeiro a comentar

TDD (Test-Driven Development)

  1. 1. Renato Groffe Abril/2015
  2. 2.  Mais de 15 anos de experiência na área de Tecnologia  Pós-graduação em Engenharia de Software – ênfase em SOA  Cursando MBA em Business Intelligence (FIAP)  Graduação em Sistemas de Informação  Técnico em Processamento de Dados  MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT
  3. 3.  Página 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  Visual Studio Unit Testing Framework (também conhecido como MS Test)
  5. 5.  Motivos que contribuem para a falta de testes  Quais os impactos da falta de testes?  Visão geral dos diferentes tipos de testes na área de software  Testes unitários e a plataforma .NET  TDD: conceitos gerais  Implementação de um exemplo prático  Testes unitários e o Visual Studio 2015
  6. 6.  A realização de testes é muitas vezes negligenciada: ◦ Falta de planejamento ◦ Tempo escasso ◦ Equipes reduzidas e sobrecarregadas, trabalhando simultaneamente em vários projetos ◦ Falta de hábito ◦ Excesso de confiança de alguns profissionais
  7. 7.  Retrabalho  Custos que excedem o orçamento  Conflitos entre membros de uma equipe técnica ou junto à área de negócios  Prejuízos à imagem da equipe ou empresa responsável por um projeto
  8. 8.  Garantir que o produto atende aquilo que foi especificado para o projeto ◦ Verificação do correto funcionamento de uma aplicação ◦ Detecção de falhas e defeitos que poderiam passar em branco até a subida em Produção
  9. 9.  Teste de unidade (ou teste unitário): verificação das menores unidades (método, classe, objeto) em um software, a fim de determinar a lógica de uma estrutura sob análise  Teste de integração: análise do funcionamento em conjunto das diferentes partes que compõem uma aplicação  Teste de sistema: simulação de uma situação real, em um ambiente equivalente ao de Produção  Teste de aceitação: conduzidos por um grupo de usuários finais com o intuito de simular operações cotidianas  Teste de regressão: verifica se mudanças introduzidas em uma versão resultam em efeitos colaterais nas funcionalidades pré-existentes
  10. 10.  São características comumente atribuídas aos testes unitários: ◦ São automatizados e repetíveis ◦ Podem ser implementados facilmente ◦ Uma vez escritos, os testes devem ser mantidos para reuso futuro ◦ Qualquer profissional envolvido com o desenvolvimento de uma aplicação deve ser capaz de executá-los ◦ Facilmente acionáveis, com isto acontecendo a partir de um botão ou item de menu dentro de uma IDE ◦ Rapidez na execução
  11. 11.  Assim como as principais plataformas da atualidade, o .NET Framework conta com diversas alternativas para a implementação de testes unitários: ◦ Visual Studio Unit Testing Framework (MS Test) ◦ NUnit (http://www.nunit.org/) ◦ xUnit.net (https://github.com/xunit)  É possível integrar a utilização destes frameworks ao processo de build de uma aplicação → O Team Foundation é um bom exemplo de solução que suporta este tipo de funcionalidade
  12. 12.  Criando um novo projeto de testes unitários:
  13. 13.  O menu TEST
  14. 14.  Executando os testes definidos em uma classe
  15. 15.  A janela Test Explorer e o resultado da execução de testes unitários
  16. 16.  O uso do Visual Studio Unit Testing Framework requer: ◦ A criação de um novo projeto de testes ◦ Referenciar a aplicação que será submetida a testes neste novo projeto ◦ A criação de classes que conterão os testes, marcando as mesmas com o atributo “TestClass” ◦ A definição de métodos para checagens nessas classes de testes, com estes últimos sendo marcados com o atributo “TestMethod” e fazendo uso de funções definidas na classe Assert
  17. 17.  Um pouco mais sobre a classe Assert: ◦ Definida no namespace Microsoft.VisualStudio.TestTools.UnitTesting ◦ Caso uma checagem produza como resultado o valor false, considera-se que o teste em questão gerou um erro ◦ Alguns dos métodos disponibilizados por este tipo: AreEqual, AreNotEqual, IsFalse, IsTrue, IsNull e IsNotNull
  18. 18.  Desenvolvimento baseado na codificação de testes unitários  Abordagem que tem “início” em 2002, com a publicação 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
  19. 19.  Construção de soluções de uma maneira que facilite a integração a ferramentas para a execução de testes unitários  Codificação de testes unitários antes mesmo da implementação das partes que serão submetidas a análises → evitando assim a elaboração de testes “viciados”
  20. 20.  A implementação de uma funcionalidade segue um ciclo conhecido como Red-Green-Refactor (com a execução dos testes unitários em todos os estágios)
  21. 21.  Teste elaborado antes mesmo da funcionalidade ter sido codificada (apenas a estrutura básica foi definida), de forma a se evitar uma verificação “viciada” Exemplo de definição de classe com funcionalidades ainda não implementadas→
  22. 22. Teste unitário criado no Visual Studio →
  23. 23.  Funcionalidade codificada da forma mais simples possível, de maneira a garantir a execução com sucesso dos testes Exemplo anterior com funcionalidades já implementadas →
  24. 24.  Eliminação de instruções duplicadas e eventuais melhorias no código Exemplo de classe refatorada →
  25. 25.  Código mais claro, já que os testes são escritos com o objetivo de checar porções menos extensas de um projeto  Testes unitários podem ser encarados como uma forma de se documentar o código → entendimento de como o método ou classe funciona  Um rápido feedback, com a geração de alertas diante de eventuais problemas → algo extremamente importante ao se efetuarem testes de regressão  Uma maior cobertura de diferentes trechos de código, o que poderia não acontecer com outros tipos de testes  Falhas são apontadas durante o desenvolvimento, economizando assim tempo e recursos financeiros
  26. 26.  Ao buscar um código mais simples e de fácil manutenção, a adoção de TDD acaba por favorecer uma melhor assimilação de boas práticas de desenvolvimento/arquitetura de software: ◦ Separação de Responsabilidades (ao isolar a lógica de negócios ou de acesso a dados das camadas de visualização de uma aplicação) ◦ Maior coesão (evitando a implementação de classes “faz-tudo”) ◦ Menor acoplamento (a simplificação do código visando a escrita de testes eficazes contribui para uma menor dependência entre diferentes partes de uma aplicação)
  27. 27.  Cálculo de juros compostos: Total a ser Pago = Vl. Empréstimo * ((1 + Taxa Juros Mensal) ^ Núm. Meses)  Casos de teste:  Classe a ser criada:
  28. 28.  Link para download da solução de exemplo: https://gallery.technet.microsoft.com/Exemplo-de-aplicao-que-4f2cb4c1
  29. 29.  O Visual Studio 2015 conta com um novo recurso chamado “Smart Unit Tests”, com o objetivo de simplificar o processo de geração de testes unitários: ◦ Geração de vários casos de teste a partir de um simples clique do mouse ◦ Emprega técnicas de análise de código que buscam exercitar todos os caminhos lógicos existentes dentro de um método/função ◦ Possibilidade de criação de um projeto de testes a partir dos casos levantados por esta ferramenta → útil em testes de regressão
  30. 30.  Casos de testes gerados automaticamente pelo Visual Studio 2015:
  31. 31.  Quando aplicar TDD? ◦ Testando todas as funcionalidades da aplicação, sem exceções? ◦ Considerando apenas funcionalidades mais significativas do ponto de vista do negócio?
  32. 32. Dúvidas, sugestões???
  33. 33.  Testes Unitários no Visual Studio http://www.devmedia.com.br/testes-unitarios-no-visual-studio- 2012/27215  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
  34. 34. Obrigado!!!

×