Pular para conteúdo

1. Introdução

1.1. Sobre a estrutura do documento

Este documento está estruturado em torno dos exemplos. Estes exemplos utilizam a linguagem de programação Java e os frameworks JUnit e Spring Boot para escrever e executar os testes.

Portanto é necessário um conhecimento mínimo destas tecnologias para tirar maior proveito do conteúdo.

1.2. Sobre o conteúdo

Uma das principais fontes deste documento é o livro TDD - Desenvolvimento Guiado por Testes - Kent Beck sendo o autor um dos fundadores do Extreme Programming (XP) e um defensor ávido de práticas de desenvolvimento ágil, que tem uma abordagem clara sobre o que deve ser testado.

Segundo Beck, os testes unitários devem focar nas unidades mais pequenas de código, ou seja, nas funções ou métodos individuais. Ele defende a ideia de que cada unidade funcional isolada do código deve ter um conjunto associado de testes unitários que verificam se ela está produzindo os resultados esperados em diversas condições.

Em Java, isso significa que cada método ou função que você escreve deve ter testes unitários que garantam que ele se comporte conforme o esperado, cobrindo casos normais e situações de exceção. Esses testes devem ser automatizados e executáveis de maneira rápida e independente, proporcionando feedback instantâneo aos desenvolvedores.

E quanto aos testes de integração, devem ser orientados a uma ou mais regras de negócios que serão atendidas ao executar esta funcionalidade do sistema. Ou seja, enquanto o teste unitário isola métodos do software, o teste de integração isola funcionalidades.

Além disso, Beck enfatiza a importância de testar não apenas o "caminho feliz" (casos em que o código executa conforme o esperado), mas também casos de borda e situações de erro. Isso contribui para a robustez do código e ajuda a evitar regressões, garantindo que as alterações futuras não quebrem funcionalidades existentes inadvertidamente.

Em resumo, neste documento, seguindo a abordagem de Kent Beck em testes em Java, vamos abordar como testar cada unidade funcional isolada e como testar uma funcionalidade completa do software. Esses testes devem abranger casos normais, de borda e de erro, garantindo a confiabilidade e a manutenibilidade do código.

1.3. Sobre o objetivo

Kent Beck é conhecido por sua abordagem pragmática e foco na simplicidade e eficiência. Sua filosofia não necessariamente preconiza a busca por uma cobertura de teste total, mas sim por uma cobertura eficaz e significativa. Ele acredita que é mais valioso ter um conjunto menor de testes que realmente adicionam valor e confiança ao código do que ter uma cobertura extensiva, mas potencialmente superficial.

A abordagem de Beck destaca a importância de garantir que os unitários sejam significativos e capazes de capturar os principais comportamentos do código. Ele sugere focar nos aspectos críticos e nas funcionalidades essenciais do software. Beck é conhecido por frases como "Teste tudo que poderia quebrar" e "Teste primeiro", promovendo a ideia de que os testes devem ser direcionados para áreas mais propensas a falhas ou mudanças.

Quanto à validação da qualidade dos testes unitários, Kent Beck enfatiza que a execução bem-sucedida dos testes não é suficiente. Ele encoraja os desenvolvedores a analisarem os resultados dos testes e interpretarem as informações fornecidas pelos mesmos. Além disso, Beck incentiva a busca por feedback constante e ajustes nos testes conforme o código evolui.

Uma prática comum associada à abordagem de Kent Beck é a "refatoração com confiança". Isso significa que, ao refatorar o código, os desenvolvedores podem confiar nos testes existentes para garantir que as alterações não quebram a funcionalidade existente. Se os testes passam, há uma maior confiança na integridade do código.

Portanto, o objetivo deste documento é demonstrar com exemplos que a busca pela qualidade dos testes, sejam estes unitários ou de integração, supera a busca por cobertura total do software quando o objetivo é a eficácia.