Final Project (2013): Test-Driven Development applied on web applications

Luiz Henrique
Luiz HenriqueSoftware developer
Desenvolvimento orientado a testes
aplicado a sistemas web
FATEC - Análise e Desenvolvimento de Sistemas
Autor: Luiz Henrique Monteiro Assunção
Orientador: Norton Glaser
Agenda
 Motivação da Pesquisa
 Referencial teórico
 O que é TDD e Teste de Unidade?
 Benefícios e efeitos
 Ciclos de desenvolvimento
 Métricas
 Ferramentas utilizadas no mercado
 NUnit
 QUnit
 Entrevista
 Considerações Finais
Contexto
Fonte: http://sembugs.blogspot.com.br/2013/02/tdd-test-driven-development.html
Contexto
Fonte: http://sembugs.blogspot.com.br/2013/02/tdd-test-driven-development.html
Abordagem Test after
Desenvolvimento orientado a testes
Test-Driven Development
TDD
 Criado por Kent Beck
 Alinhado com práticas ágeis, principalmente Extreme Programming (baby steps)
 Sugere ao programador que escreva o código de teste antes do código de
produção
 Não escrever uma linha de código sem que você tenha um teste automatizado
falhando (BECK, 2002)
Etapa 1: Adicionar um teste
 Teste de Unidade
 Uma porção de código escrita por um desenvolvedor que representa uma parte de
uma específica área do código de uma funcionalidade testada (HUNT, 2007)
 Cada nova funcionalidade é iniciada escrevendo um teste
 Deve ser escrito antes do código de produção
 Focar nos requisitos antes de codificar. Analisar o que está fazendo.
Etapa 2: Executar todos os testes
 Checar se existe alguma falha
 Valida se o sistema está funcionando corretamente
 O teste da Etapa 1 falhará
 Confiança de que as outras partes do software estejam funcionando
Etapa 3: Escrever algum código
 Objetivo: solucionar o problema da maneira mais minimalista possível
 Escrever comandos simples para fazer com que o teste passe
 Neste estágio, o código não precisa ser perfeito
 Resultado: eliminação de possíveis códigos que não serão utilizados
Etapa 4: Executar todos os testes
 Verificar se todos os requisitos estão coerentes
 Nenhum teste pode falhar
 Analisa se a adição do novo código “quebrou” alguma parte do sistema
Etapa 5: Refatorar o código
 Aumento na qualidade do código
 Melhorar a manutenção
 O desenvolvedor terá confiança para alterar o código. Os testes mostrarão se
ocorreu algum problema
 Utilizar técnicas
 Remoção de duplicação
 Renomear variáveis com nomes mais expressivos
 Mover código para local apropriado
Ciclo iterativo do TDD
Fonte: http://www.lucianotulio.com.br/wp-content/uploads/2013/03/tdd-642x435.png
Benefícios e efeitos
 Assegurar a qualidade do código desde o início
 Redução da quantidade de bugs recorrentes
 Desenvolvedores adquirem mais confiança para refatoração
 Documentação no código
 Software manutenível
 Fidelidade do código com os requisitos do negócio
 Alinhamento com os princípios SOLID
 Separação de responsabilidades
 Software aberto a modificações
Métricas
 Na engenharia de software, as métricas são importantes para realizar
avaliações no produto e tomar decisões
 Permite realizar uma análise quantitativa
 São apenas indicadores
Métrica: Cobertura de Código
 Mede o quanto o código está testado
 Número proporcional com a quantidade de código que possui ao menos um
teste de unidade que teste-o
 Um código que não esteja 100% coberto não necessariamente significa que a
qualidade do software esteja baixa
 Para um desenvolvimento utilizando TDD, acima de 85% de cobertura é um
número considerável
Métrica: Lines of Code (LoC)
 Mede o tamanho do software
 Número de LoC é proporcional ao esforço alocado para manter o software
funcionando
 TDD auxilia na redução por buscar soluções simples
 Não revela a complexidade dos algoritmos
Métrica: Complexidade Ciclomática
 Mede quão complexo é um algoritmo (método).
 Complexidade = número de caminhos que um método pode ter
 Cada condicional aumenta a complexidade
 Quanto maior a complexidade, maior o risco de ocorrer algum erro
Valor da Complexidade Risco
1-10 Baixo Risco
11-20 Risco Moderado
21-50 Alto Risco
> 50 Alto Risco (não é testável)
Impactos da complexidade ciclomática por método
Fonte: http://www.mccabe.com/pdf/MeasuringSoftwareComplexityUAV.pdf
Métricas
Tipo de Métrica O que ela mede
Cobertura de código O quanto o código está testado
Lines of Code (LoC) Tamanho do software
Complexidade Ciclomática Complexidade dos algoritmos
Fonte: Autoria própria
Frameworks para TDD em sistemas Web
 Muito esforço realizar os baby steps manualmente. Framework de testes
automatiza a execução da suíte
 xUnit: uma das primeiras iniciativas para se criar frameworks de testes de unidade
 Junit (Java)
 NUnit (C#)
 QUnit (Javascript)
 Ambiente:
 C# no Server-Side
 Javascript no Client-Side
NUnit X Visual Studio Unit Framework
NUnit VS Unit Framework
Software maduro e estável Lançado com o VS 2008
Open Source (gratuito) Desenvolvido pela Microsoft
Releases frequentes Atualização conforme VS
Velocidade na execução Possui IDE fácil de utilizar
Integração com outras ferramentas
open source
Integração com Team Foundation
Server
NUnit - Execução de testes
QUnit X Jasmine
QUnit Jasmine
Utilizado no projeto jQuery Utilizado em projetos Ruby
Foca no Javascript usado no browser Pode ser utilizado em projetos que não
possuam Javascript como linguagem
para comunicação com o DOM (Node.Js)
Simplicidade na utilização
QUnit - Execução de testes
Pesquisa sobre testes automatizados
 40 desenvolvedores entrevistados
 81% dos entrevistados realizam testes manualmente
 35% dos entrevistados possuíam plena confiança do funcionamento de toda a
aplicação, após modificações
 55% dos entrevistados afirmam que existe uma alta incidência de erros em
ambiente de produção na empresa onde trabalham
 8% dos entrevistados utilizam a abordagem TDD
Referências Bibliográficas
 BECK, K. Test-Driven Development by Example, 1ª ed. USA: Addison-Wesley
Professional, 2002.
 FOWLER, M. xUnit. Disponível em:
http://www.martinfowler.com/bliki/Xunit.html Data de Acesso: 20 de
novembro de 2013.
 HUNT A.; THOMAS D.; Pragmatric Unit Testing in C# with NUnit, 2ª ed.
Texas: The Pragmatric Programmers, 2007.
Obrigado pela atenção!
1 de 25

Recomendados

Test-Driven Develpment - TDD por
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
821 vistas27 diapositivas
Instituto Stela S&T#001, Projeto de software com testes unitários por
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela (Florianópolis-SC, Brasil)
637 vistas36 diapositivas
Validação e Testes de software por
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de softwareRondinelli Mesquita
2.8K vistas137 diapositivas
TDD Desenvolvimento orientado ao teste por
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeRafaela Prado
190 vistas13 diapositivas
Testes De Software - Uma Visão Geral por
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
18.1K vistas90 diapositivas
TDD (Test-Driven Development) por
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
3.8K vistas37 diapositivas

Más contenido relacionado

La actualidad más candente

Introdução ao TDD por
Introdução ao TDDIntrodução ao TDD
Introdução ao TDDEduardo Mendes
1.2K vistas61 diapositivas
Verificação, validação e teste de software ágil por
Verificação, validação e teste de software ágilVerificação, validação e teste de software ágil
Verificação, validação e teste de software ágilGilberto Gampert
1.1K vistas11 diapositivas
Engenharia de Testes por
Engenharia de TestesEngenharia de Testes
Engenharia de TestesUFPA
4.3K vistas37 diapositivas
Teste de Software por
Teste de SoftwareTeste de Software
Teste de SoftwareWagner Zaparoli
1.1K vistas43 diapositivas
Panorama geral sobre testes e qualidade de software por
Panorama geral sobre testes e qualidade  de softwarePanorama geral sobre testes e qualidade  de software
Panorama geral sobre testes e qualidade de softwareAriane Izac
246 vistas35 diapositivas
Introdução a Testes de Software - Unidade I por
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
6.1K vistas76 diapositivas

La actualidad más candente(20)

Verificação, validação e teste de software ágil por Gilberto Gampert
Verificação, validação e teste de software ágilVerificação, validação e teste de software ágil
Verificação, validação e teste de software ágil
Gilberto Gampert1.1K vistas
Engenharia de Testes por UFPA
Engenharia de TestesEngenharia de Testes
Engenharia de Testes
UFPA4.3K vistas
Panorama geral sobre testes e qualidade de software por Ariane Izac
Panorama geral sobre testes e qualidade  de softwarePanorama geral sobre testes e qualidade  de software
Panorama geral sobre testes e qualidade de software
Ariane Izac246 vistas
Introdução a Testes de Software - Unidade I por João Lourenço
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
João Lourenço6.1K vistas
Aplicação de Testes Caixa Branca / Preta. Métodos dos caminhos básicos ou cri... por Stanley Araújo
Aplicação de Testes Caixa Branca / Preta. Métodos dos caminhos básicos ou cri...Aplicação de Testes Caixa Branca / Preta. Métodos dos caminhos básicos ou cri...
Aplicação de Testes Caixa Branca / Preta. Métodos dos caminhos básicos ou cri...
Stanley Araújo947 vistas
OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE DE PROJETOS por Luiz Ladeira
OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE DE PROJETOSOS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE DE PROJETOS
OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE DE PROJETOS
Luiz Ladeira1.4K vistas
Test-Driven Development (TDD) utilizando o framework xUnit.net por Renato Groff
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
Renato Groff2.1K vistas
Agile Testing - Qualidade do Discovery ao Deploy por Eduardo Cini
Agile Testing - Qualidade do Discovery ao DeployAgile Testing - Qualidade do Discovery ao Deploy
Agile Testing - Qualidade do Discovery ao Deploy
Eduardo Cini106 vistas
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo por crc1404
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De ProcessoUma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
crc14043.9K vistas
Palestra Teste de Software: princípios, ferramentas e carreira por Taís Dall'Oca
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreira
Taís Dall'Oca2.2K vistas
Introdução ao Teste de Software - Uma abordagem prática por Fabrício Campos
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
Fabrício Campos30.8K vistas

Similar a Final Project (2013): Test-Driven Development applied on web applications

Subm_SamuelPereira_FINAL por
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALND Engineering and Software - Health Technology
182 vistas25 diapositivas
Apresentacao Testes de Unidade por
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
1.1K vistas25 diapositivas
Gerenciamento da Qualidade de Software 4.pptx por
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
53 vistas33 diapositivas
Test-Driven Development (TDD) - MSP Coding Day por
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayRenato Groff
378 vistas25 diapositivas
Desenvolvimento Guiado Por Testes por
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesGuilherme Chapiewski
2.6K vistas34 diapositivas
Teste Driven Development por
Teste Driven DevelopmentTeste Driven Development
Teste Driven DevelopmentEduardo Carvalho
909 vistas33 diapositivas

Similar a Final Project (2013): Test-Driven Development applied on web applications(20)

Apresentacao Testes de Unidade por Aline Ferreira
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
Aline Ferreira1.1K vistas
Gerenciamento da Qualidade de Software 4.pptx por Roberto Nunes
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
Roberto Nunes53 vistas
Test-Driven Development (TDD) - MSP Coding Day por Renato Groff
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
Renato Groff378 vistas
Desenvolvimento Dirigido por Testes por Camilo Ribeiro
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
Camilo Ribeiro1.7K vistas
XP Programming por CJR, UnB
XP ProgrammingXP Programming
XP Programming
CJR, UnB415 vistas
Behavior-Driven Development (BDD) - QA Ninja Conf 2016 por Renato Groff
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Renato Groff664 vistas
ybr789try por teste
ybr789tryybr789try
ybr789try
teste215 vistas
Testes de software por teste
Testes de softwareTestes de software
Testes de software
teste779 vistas
Conceitos e fundamentos sobre testes de software e garantia da qualidade por rzauza
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
rzauza23.6K vistas
Keynote Visual Studio Summit 2016 por Ramon Durães
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
Ramon Durães624 vistas

Final Project (2013): Test-Driven Development applied on web applications

  • 1. Desenvolvimento orientado a testes aplicado a sistemas web FATEC - Análise e Desenvolvimento de Sistemas Autor: Luiz Henrique Monteiro Assunção Orientador: Norton Glaser
  • 2. Agenda  Motivação da Pesquisa  Referencial teórico  O que é TDD e Teste de Unidade?  Benefícios e efeitos  Ciclos de desenvolvimento  Métricas  Ferramentas utilizadas no mercado  NUnit  QUnit  Entrevista  Considerações Finais
  • 5. Desenvolvimento orientado a testes Test-Driven Development TDD  Criado por Kent Beck  Alinhado com práticas ágeis, principalmente Extreme Programming (baby steps)  Sugere ao programador que escreva o código de teste antes do código de produção  Não escrever uma linha de código sem que você tenha um teste automatizado falhando (BECK, 2002)
  • 6. Etapa 1: Adicionar um teste  Teste de Unidade  Uma porção de código escrita por um desenvolvedor que representa uma parte de uma específica área do código de uma funcionalidade testada (HUNT, 2007)  Cada nova funcionalidade é iniciada escrevendo um teste  Deve ser escrito antes do código de produção  Focar nos requisitos antes de codificar. Analisar o que está fazendo.
  • 7. Etapa 2: Executar todos os testes  Checar se existe alguma falha  Valida se o sistema está funcionando corretamente  O teste da Etapa 1 falhará  Confiança de que as outras partes do software estejam funcionando
  • 8. Etapa 3: Escrever algum código  Objetivo: solucionar o problema da maneira mais minimalista possível  Escrever comandos simples para fazer com que o teste passe  Neste estágio, o código não precisa ser perfeito  Resultado: eliminação de possíveis códigos que não serão utilizados
  • 9. Etapa 4: Executar todos os testes  Verificar se todos os requisitos estão coerentes  Nenhum teste pode falhar  Analisa se a adição do novo código “quebrou” alguma parte do sistema
  • 10. Etapa 5: Refatorar o código  Aumento na qualidade do código  Melhorar a manutenção  O desenvolvedor terá confiança para alterar o código. Os testes mostrarão se ocorreu algum problema  Utilizar técnicas  Remoção de duplicação  Renomear variáveis com nomes mais expressivos  Mover código para local apropriado
  • 11. Ciclo iterativo do TDD Fonte: http://www.lucianotulio.com.br/wp-content/uploads/2013/03/tdd-642x435.png
  • 12. Benefícios e efeitos  Assegurar a qualidade do código desde o início  Redução da quantidade de bugs recorrentes  Desenvolvedores adquirem mais confiança para refatoração  Documentação no código  Software manutenível  Fidelidade do código com os requisitos do negócio  Alinhamento com os princípios SOLID  Separação de responsabilidades  Software aberto a modificações
  • 13. Métricas  Na engenharia de software, as métricas são importantes para realizar avaliações no produto e tomar decisões  Permite realizar uma análise quantitativa  São apenas indicadores
  • 14. Métrica: Cobertura de Código  Mede o quanto o código está testado  Número proporcional com a quantidade de código que possui ao menos um teste de unidade que teste-o  Um código que não esteja 100% coberto não necessariamente significa que a qualidade do software esteja baixa  Para um desenvolvimento utilizando TDD, acima de 85% de cobertura é um número considerável
  • 15. Métrica: Lines of Code (LoC)  Mede o tamanho do software  Número de LoC é proporcional ao esforço alocado para manter o software funcionando  TDD auxilia na redução por buscar soluções simples  Não revela a complexidade dos algoritmos
  • 16. Métrica: Complexidade Ciclomática  Mede quão complexo é um algoritmo (método).  Complexidade = número de caminhos que um método pode ter  Cada condicional aumenta a complexidade  Quanto maior a complexidade, maior o risco de ocorrer algum erro Valor da Complexidade Risco 1-10 Baixo Risco 11-20 Risco Moderado 21-50 Alto Risco > 50 Alto Risco (não é testável) Impactos da complexidade ciclomática por método Fonte: http://www.mccabe.com/pdf/MeasuringSoftwareComplexityUAV.pdf
  • 17. Métricas Tipo de Métrica O que ela mede Cobertura de código O quanto o código está testado Lines of Code (LoC) Tamanho do software Complexidade Ciclomática Complexidade dos algoritmos Fonte: Autoria própria
  • 18. Frameworks para TDD em sistemas Web  Muito esforço realizar os baby steps manualmente. Framework de testes automatiza a execução da suíte  xUnit: uma das primeiras iniciativas para se criar frameworks de testes de unidade  Junit (Java)  NUnit (C#)  QUnit (Javascript)  Ambiente:  C# no Server-Side  Javascript no Client-Side
  • 19. NUnit X Visual Studio Unit Framework NUnit VS Unit Framework Software maduro e estável Lançado com o VS 2008 Open Source (gratuito) Desenvolvido pela Microsoft Releases frequentes Atualização conforme VS Velocidade na execução Possui IDE fácil de utilizar Integração com outras ferramentas open source Integração com Team Foundation Server
  • 20. NUnit - Execução de testes
  • 21. QUnit X Jasmine QUnit Jasmine Utilizado no projeto jQuery Utilizado em projetos Ruby Foca no Javascript usado no browser Pode ser utilizado em projetos que não possuam Javascript como linguagem para comunicação com o DOM (Node.Js) Simplicidade na utilização
  • 22. QUnit - Execução de testes
  • 23. Pesquisa sobre testes automatizados  40 desenvolvedores entrevistados  81% dos entrevistados realizam testes manualmente  35% dos entrevistados possuíam plena confiança do funcionamento de toda a aplicação, após modificações  55% dos entrevistados afirmam que existe uma alta incidência de erros em ambiente de produção na empresa onde trabalham  8% dos entrevistados utilizam a abordagem TDD
  • 24. Referências Bibliográficas  BECK, K. Test-Driven Development by Example, 1ª ed. USA: Addison-Wesley Professional, 2002.  FOWLER, M. xUnit. Disponível em: http://www.martinfowler.com/bliki/Xunit.html Data de Acesso: 20 de novembro de 2013.  HUNT A.; THOMAS D.; Pragmatric Unit Testing in C# with NUnit, 2ª ed. Texas: The Pragmatric Programmers, 2007.