Test-Driven Development (TDD) - MSP Coding Day

Preview:

Citation preview

TDD – Test-Driven Development

Renato GroffeJulho/2016

Apresentação – Renato Groffe

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

Contatos Página no Facebook

https://www.facebook.com/RenatoGroffeSW

Perfil no Facebookhttps://www.facebook.com/renatogroff

LinkedInhttp://br.linkedin.com/in/renatogroffe

Recurso Utilizados Visual Studio 2015 Update 3

Visual Studio Unit Testing Framework (também conhecido como MS Test)

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 de unidade e a plataforma .NET

TDD: conceitos gerais

Implementação de um exemplo prático

Agenda

Testes são realmente levados a sério?

Motivos que contribuem para a falta de testes A realização de testes é muitas vezes negligenciada:

◦ Falta de planejamento

◦ Tempo escasso

◦ Equipes reduzidas e sobrecarregadas

◦ Falta de hábito

◦ Excesso de confiança de alguns profissionais

Negligência seguida de consequências desagradáveis...

Quais os impactos da falta de testes?

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

Software: esperado x entregue

Objetivos dos testes em um software

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

Os diferentes tipos de teste na área de software Teste de unidade

Teste de integração

Teste de sistema

Teste de aceitação

Teste de regressão

Testes de unidade: uma visão geral

◦ São automatizados e repetíveis

◦ Podem ser implementados facilmente

◦ Uma vez escritos, os testes devem ser mantidos para reuso futuro

◦ Qualquer profissional de software deve ser capaz de executá-los

◦ Facilmente acionáveis

◦ Rapidez na execução

Testes de unidade na plataforma .NET

.NET Framework conta com diversas alternativas:

◦ 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 (VSTS, por exemplo)

Test-Driven Development

Desenvolvimento baseado na codificação de testes de unidade

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

TDD e a implementação de softwares

Construção de soluções de uma maneira que facilite a execução de testes de unidade

Codificação de testes antes mesmo da implementação → evitando assim a elaboração de testes “viciados”

Como TDD funciona?

Ciclo Red-Green-Refactor (com a execução dos testes de unidade em todos os estágios)

Benefícios em se adotar TDD

Código mais claro

Uma forma de se documentar o código

Um rápido feedback

Uma maior cobertura de diferentes trechos de código

Falhas são apontadas durante o desenvolvimento

TDD e boas práticas

A adoção de TDD acaba por favorecer uma melhor assimilação de boas práticas:

◦ Separação de Responsabilidades

◦ Maior coesão (evitando classes “faz-tudo”)

◦ Menor acoplamento

Exemplo de implementação no Visual Studio 2015 Cálculo de juros compostos (arredondar para 2 casas decimais):

Total a ser Pago = Vl. Empréstimo * ((1 + Taxa Juros Mensal) ^ Núm. Meses)

Casos de teste:

Classe a ser criada:

Exemplo de implementação no Visual Studio 2015

Link da solução de exemplo:https://github.com/renatogroffe/TDD_MSPCodingDay2

Considerações finais

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?

Dúvidas???

Referências Testes de Unidade no Visual Studio

http://www.devmedia.com.br/testes-unitarios-no-visual-studio-2012/27215

Test-Driven Developmenthttp://martinfowler.com/bliki/TestDrivenDevelopment.html

Unit Testhttp://martinfowler.com/bliki/UnitTest.html

Obrigado!!!