Test Driven Development Teste e design no mundo real com Ruby
Hugo Corbucci, Mauricio AnicheConteúdo
Por que não testamos software? Porque é caro? Porque é demorado? Porque é chato? Testes automatizados são a solução para todos esses problemas. Aprenda a escrever um programa que testa seu programa de forma rápida, barata e produtiva, e aumente a qualidade do seu produto final.
Neste livro, você aprenderá sobre TDD, uma das práticas ágeis de desenvolvimento de software mais populares. TDD faz o desenvolvedor escrever o teste antes mesmo de implementar o código. Essa simples inversão na maneira de se trabalhar faz com o que o desenvolvedor escreva código mais testado, com menos bugs, e, inclusive, com mais qualidade. Seja profissional, teste seu software!
Todos os exemplos desse livro foram escritos em Ruby.
Sumário
- 1 Introdução
- 1.1 Era uma vez um projeto sem testes...
- 1.2 Por que devemos testar?
- 1.3 Por que não testamos?
- 1.4 Testes automatizados e TDD
- 1.5 Conclusão
- 1.6 Como tirar dúvidas?
- 2 Testes de Unidade
- 2.1 O que é um teste de unidade?
- 2.2 Preciso mesmo escrevê-los?
- 2.3 O primeiro teste de unidade
- 2.4 Continuando a testar
- 2.5 Conclusão
- 3 Introdução ao Test-Driven Development
- 3.1 O problema dos números romanos
- 3.2 O primeiro teste
- 3.3 Refletindo sobre o assunto
- 3.4 Quais as vantagens?
- 3.5 Um pouco da história de TDD
- 3.6 Conclusão
- 4 Simplicidade e Baby Steps
- 4.1 O problema do cálculo de salário
- 4.2 Implementando da maneira mais simples possível
- 4.3 Passos de Bebê (ou Baby Steps)
- 4.4 Usando baby steps de maneira consciente
- 4.5 Conclusão
- 5 TDD e design de classes
- 5.1 O problema do carrinho de compras
- 5.2 Testes que influenciam no design de classes
- 5.3 Diferenças entre TDD e testes da maneira tradicional
- 5.4 Testes como rascunho
- 5.5 Conclusão
- 6 Qualidade no código do teste
- 6.1 Repetição de código entre testes
- 6.2 Nomenclatura dos testes
- 6.3 Test Data Builders
- 6.4 Testes repetidos
- 6.5 Escrevendo boas asserções
- 6.6 Testando listas
- 6.7 Separando as classes de teste
- 6.8 Conclusão
- 7 TDD e a coesão
- 7.1 Novamente o problema do cálculo de salário
- 7.2 Ouvindo o feedback dos testes
- 7.3 Testes em métodos privados?
- 7.4 Resolvendo o problema da calculadora de salário
- 7.5 O que olhar no teste em relação a coesão?
- 7.6 Conclusão
- 8 TDD e o acoplamento
- 8.1 O problema da nota fiscal
- 8.2 Mock Objects
- 8.3 Dependências explícitas
- 8.4 Ouvindo o feedback dos testes
- 8.5 Classes estáveis
- 8.6 Resolvendo o problema da nota fiscal
- 8.7 Testando métodos estáticos
- 8.8 TDD e a constante criação de interfaces
- 8.9 O que olhar no teste em relação ao acoplamento?
- 8.10 Conclusão
- 9 TDD e o encapsulamento
- 9.1 O problema do processador de boleto
- 9.2 Ouvindo o feedback dos testes
- 9.3 Tell, Don't Ask e Lei de Demeter
- 9.4 Resolvendo o problema do processador de boletos
- 9.5 O que olhar no teste em relação ao encapsulamento?
- 9.6 Conclusão
- 10 Testes de integração e TDD
- 10.1 Testes de unidade, integração e sistema
- 10.2 Quando não usar mocks?
- 10.3 Testes em subclasses de ActiveRecord::Base
- 10.4 Devo usar TDD em testes de integração?
- 10.5 Testes em aplicações Web
- 10.6 Conclusão
- 11 Testando código dinâmico
- 11.1 É possível utilizar TDD com Duck Typing?
- 11.2 A mágica do send e seus testes
- 11.3 O uso e teste de method_missing
- 12 Quando não usar TDD?
- 12.1 Quando não praticar TDD?
- 12.2 100% de cobertura de código?
- 12.3 Devo testar códigos simples?
- 12.4 Erros comuns durante a prática de TDD
- 12.5 Como convencer seu chefe sobre TDD?
- 12.6 TDD em sistemas legados
- 12.7 Conclusão
- 13 E agora?
- 13.1 Como aprender mais agora?
- 13.2 Dificuldade no aprendizado
- 13.3 Como interagir com outros praticantes?
- 13.4 Conclusão final
- 14 Apêndice: princípios SOLID
- 14.1 Sintomas de projetos de classes em degradação
- 14.2 Princípios de projeto de classes
- 14.3 Conclusão
- 15 Apêndice: RSpec como biblioteca de testes de unidade
- 15.1 Asserções na primeira versão do RSpec
- 15.2 Biblioteca de mocks embutida no RSpec
- 15.3 Comparando a saída das duas bibliotecas
- 15.4 Novas asserções do RSpec
- 15.5 Conclusão
Autores
Hugo Corbucci
Hugo Corbucci é mestre em Ciências da Computação do IME/USP no tema “Aplicação de Métodos Ágeis ao Desenvolvimento de Software Livre”. Ele é fundador e coordenador do projeto Archimedes – The Open CAD (em 2005) e fundador do Coding Dojo São Paulo (em 2007). Foi professor nos cursos de verão do IME/USP (de 2007 a 2010) onde também atuou como assistente de ensino no curso de Programação Extrema da graduação. Também já ministrou cursos sobre métodos ágeis no ICMC e foi palestrante em conferências nacionais e internacionais. Já foi desenvolvedor e assessor em métodos ágeis na Maps Risk Management Solution no período de adoção de Scrum da empresa (em 2006). É sócio-fundador da Agilbits e atuou como programador e líder de projetos desenvolvendo sistemas desktop com Java usando a plataforma Eclipse RCP e sistemas web com Ruby usando Rails de 2008 a 2011. Atualmente, trabalha como consultor na ThoughtWorks em Chicago revitalizando um sistema em ruby de mais de 4 anos de idade. É apaixonado por programação e trabalho em equipes além de ser um assíduo escalador.
Mauricio Aniche
Maurício é instrutor e desenvolvedor da Caelum, possui mais de 9 anos de experiência de desenvolvimento de softwares, tendo participado de projetos para grandes empresas nacionais e internacionais. Mauricio é também mestre em Ciência da Computação pela Universidade de São Paulo (USP) onde pesquisa sobre TDD e sua influência no design de sistemas orientados a objetos. Atualmente é aluno de doutorado pelo mesmo instituto. Palestrante em eventos nacionais e internacionais, com destaque para sua apresentação no 1o Workshop Internacional sobre Test-Driven Development, localizado em Paris, no ano de 2010, Agile Brazil 2010, 2011 e 2012, e QCON SP 2010 e 2012. Mauricio gosta de discutir sobre TDD, melhores práticas e princípios de orientação a objetos, métodos ágeis de desenvolvimento de software e linguagens de programação. Está no Twitter como @mauricioaniche .
Dados do produto
- Número de páginas:
- 220
- ISBN:
- 978-85-66250-43-5
- Data publicação:
- 04/2014