Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Test Driven Development (TDD) Priscila Souza O que é TDD? O Test Driven Development ou Desenvolvimento Dirigido por Testes (TDD) foi criado por Kent Beck em 1999, o mesmo criador da metodologia eXtreme Programming. “TDD é um conjunto de técnicas que qualquer engenheiro de software pode seguir, que encoraja projetos simples e conjuntos de testes que inspiram confiança." - Kent Beck O que é TDD? “Código limpo que funciona” - Ron Jeffries. No TDD fazemos o processo inverso ao tradicional: Testamos e depois Codificamos e não Codificamos e Testamos. Fonte: Shutterstock O que é TDD? É uma técnica para programadores (e não para testadores). Essa técnica é fortemente baseada em testes automatizados, que são escritos antes do código, influenciando e orientando o design e a divisão das responsabilidades entre as classes do sistema. Fonte: Shutterstock TDD É uma metodologia para o processo de desenvolvimento de software guiado por TESTES PRIMEIRO são criados os TESTES, para POSTERIORMENTE escrever-se o CÓDIGO necessário para passar por eles Histórico do TDD - Experimento [Müller and Hagner ] conduziram um experimento estruturado comparando TDD com programação Tradicional. Foram medidos: Eficiência do TDD em termos do time de desenvolvimento Qualidade do código resultante Nível de entendimento do mesmo 2 Experimento O grupo que desenvolveu começar a implementação. O grupo que desenvolveu com TDD escreveu os casos de teste antes de começar a implementação. Já o grupo da Já o grupo da programação tradicional escreveu os testes depois de completar o código. x Fonte: Shutterstock Fonte: Shutterstock Experimento - Conclusão O código produzido pelo grupo que usou TDD teve menos erros significantes quando reusado. Os pesquisadores perceberam que a abordagem TDD aumenta substancialmente a qualidade do software e proporciona um maior entendimento do código. Como funciona o TDD? A ideia é bem simples: Escreva seus testes antes mesmo de escrever o código de produção. Mas como testar algo que ainda não existe? Fonte: Shutterstock Ciclo em passos pequenos 1- Escreva um teste que falhe: antes de começar a codificar e baseado na especificação do software, escreva um código de teste. 2- Faça o teste passar: escreva outro código limitando-se somente no que o código deve fazer. Codifique da forma mais simples possível para fazer o teste passar. 3- Refatore: depois que o teste passar verifique se o código pode ser melhorado. É neste momento que retiramos duplicidade, renomeamos variáveis, extraímos métodos, extraímos Classes, usamos algum padrão conhecido, etc. Mantra do TDD: Red – Green – Refactor 2- Escreva um teste que passe 1- Escreva um teste que falhe 3- Refatore o código RED REFACTOR GREEN TDD Fonte: Profa. Priscila Souza Lei do TDD Primeira lei: você não deve escrever qualquer implementação antes que você tenha escrito um teste que falhe; Segunda lei: você não deve escrever mais que um teste unitário para demonstrar uma falha; Terceira lei: você não deve escrever mais do que o necessário para passar por um teste que está falhando. 3 Por quê usar TDD? “O desenvolvedor não irá demorar mais tempo para desenvolver um sistema se usar TDD?” Fonte: Shutterstock “ Quais são as vantagens de se usar TDD ao invés de usar um ciclo tradicional de desenvolvimento? Por quê usar TDD? Fonte: Shutterstock “ Quanto maior for o tempo entre a inserção de um erro no código e sua descoberta pelo desenvolvedor maior será a probabilidade deste erro repetir-se em outros locais do sistema e menor a possibilidade de aprendizado. Se o erro é descoberto alguns segundos após ser introduzido, são maiores as chances do desenvolvedor corrigí-lo rapidamente, aprender com isto e passar a codificar melhor. Aprendizado O que torna a depuração muito custosa é o tempo entre a inserção do bug e o momento em que este é detectado. Quanto maior o tempo, maior o custo de depuração! Redução dos custos e vulnerabilidades do sistema Fonte: Shutterstock O desenvolvimento dirigido por testes segue o caminho da prevenção. O teste expõe o erro assim que ele entra no sistema, o que evita muita perda de tempo com depurações demoradas. Redução dos custos e vulnerabilidades do sistema Fonte: Shutterstock Mais tempo disponível e melhores oportunidades de aprendizado, os desenvolvedores codificam mais rapidamente e com maior qualidade. Aumenta-se a produtividade e reduz-se a incidência de defeitos. Aumento da qualidade e produtividade Fonte: Shutterstock 4 Escrever um caso de teste completo força a criação de um código desacoplado, aumentando assim a sua coesão e diminuindo seu acoplamento. Aprimoramento de projeto Fonte: Shutterstock Um caso de teste de unidade bem escrito proporciona uma especificação de implementação e comunica a finalidade do código de forma clara. Documentação Fonte: Shutterstock Mudanças seguras no código O TDD fornece feedback contínuo quanto ao resultado das mudanças do código em outras partes do sistema. Código Nítido. Dentre outras vantagens. Fonte: Shutterstock “TDD é a segunda coisa que um programador deve aprender. A primeira é o Hello World”. (Robert Martin) Automação de Testes Priscila Souza Automação de Testes “Automação de teste é o uso de software para controlar a execução do teste de software, a comparação dos resultados esperados com os resultados reais, a configuração das pré- condições de teste e outras funções de controle e relatório de teste.” Fonte: Shutterstock 5 Automação de Testes O propósito da automação de testes pode ser resumidamente descrito como a aplicação de estratégias e ferramentas tendo em vista a redução do envolvimento humano em atividades manuais repetitivas. Porém, a automação de testes não deve ser empregada como um substituto de 100% do teste manual! Automação de Testes - Conceitos Script de Teste: Arquivo que compõe os passos do caso de teste a serem executados sobre o sistema. Gravador ou “Recorder”: Grava na forma de uma linguagem própria passos da execução dos testes manuais. Executor de teste ou “Playback”: Recurso das ferramentas para reexecutar tudo o que foi gravado no script de teste. Razões para Automação de Testes No livro Agile Testing, da Lisa Crispin e da Janet Gregory, são citadas as seguintes razões para realizar a automação de testes: Teste manual é demorado; Reduzir a probabilidade de erros das tarefas de teste; Liberar tempo para fazer o trabalho da melhor forma; Prover feedback cedo e frequente; Razões para Automação de Testes Prover uma rede de segurança; Os testes que direcionarão a codificação (TDD) podem fazer mais do que isso; Os testes provem documentação; ROI, com o passar do tempo o esforço gasto na automação dos testes se paga. Fonte: Shutterstock Automação de Testes no Contexto Ágil A automação dos testes está entre as principais práticas ágeis, uma vez que as metodologias ágeis focam em entregas pequenas e curtas e que devem ter valor para o cliente. É necessário poder executar os testes à vontade e de forma rápida para obter feedback a respeito da qualidade do código. Escrever e executar os testes deve ser realizado junto com o sistema sendo desenvolvido. Testes Manuais X Testes Automatizados TESTES MANUAIS Requerem grande esforço de criação e manutenção; Dependente da linguagem natural; Demorados para executar; Susceptível ao testador; Exige profissionais com experiência; Etc... CANDIDATOS A TESTES MANUAIS: Funcionalidades pouco usadas; Funcionalidades que exigem inspeção visual; Protótipos 6 Testes Manuais X Testes Automatizados TESTES AUTOMATIZADOS Alta reutilização; Exigem que cada ação seja programada; Não lidam com situações inesperadas; Não exploram situações diferentes; Rápidos; Repetíveis e consistentes; Exige profissionaiscapacitados; etc. CANDIDATOS À AUTOMATIZAÇÃO Testes de regressão; Testes de fumaça; Tarefas repetitivas; Cálculos matemáticos; Funcionalidades críticas; Etc. Pirâmide de Automação de Testes UI Serviços Unitário MANUAL Fonte: Profa. Priscila Souza Principais dicas para Automação Automação de Testes A automação está longe de ser a bala de prata para o Teste de Software, mas pode trazer benefícios significativos para o projeto, quando utilizada adequadamente dentro do mesmo. Pode ser utilizada em qualquer metodologia e não demanda grande investimento financeiro, pois boa parte das ferramentas são gratuitas.
Compartilhar