Contextualização
Bem-vindos à essa jornada de aprendizado! O nosso tópico, "Testes em Python", é uma área crucial e imprescindível no cenário atual da programação e desenvolvimento de software. Os testes são fundamentais para garantir a qualidade, a segurança e a confiabilidade do software que produzimos. Eles nos ajudam a antecipar problemas e solucioná-los antes que esses afetem nossos usuários ou nosso código de produção.
Os testes automáticos em Python são o método mais eficaz de descobrir se o seu código funciona conforme o esperado. Eles podem ajudar a prevenir bugs, melhorar o design do seu código e tornar a manutenção mais fácil. Além disso, a prática de desenvolver testes antes do próprio código - conhecida como Test-Driven Development (TDD) - é uma abordagem que pode aumentar ainda mais a qualidade do software que produzimos.
Relevância dos testes de software
Na indústria de tecnologia de hoje, os testes de software são inegavelmente importantes. Segundo o relatório de falhas de software da Tricentis de 2017, os erros de software (ou bugs) foram responsáveis pela perda de $1,7 trilhão em ativos e afetaram 3,6 bilhões de pessoas. Dados como estes tornam claro que a falta de testes adequados de software tem efeitos devastadores.
Traduzindo isso para o cenário real do desenvolvedor, pense em um código que você escreveu para executar uma operação específica. Vamos dizer que o código esteja produzindo a saída esperada e até agora tudo está funcionando bem. Mas então surge uma nova funcionalidade ou alteração no código e de repente tudo começa a quebrar. Agora você descobre que uma mudança de código em um lugar quebrou outra coisa em outro lugar. Assustador, certo? Pois é justamente aqui que os testes entram em cena, garantindo que tudo continue funcionando como esperado mesmo após mudanças e adições de código.
Materiais extras
Para começar a sua jornada no universo dos testes em Python, recomendamos alguns materiais que trazem a teoria e prática deste tema de forma didática e envolvente:
- [Python Testing with pytest] Este livro introduz a ferramenta pytest e aborda conceitos como testes baseados em hipóteses, double tests, pytest plugins e muitos outros temas.
- [Test-Driven Development with Python] Este livro guia você através das técnicas de desenvolvimento e teste TDD com Python.
- [Automated Software Testing with Python] Este curso da Udemy apresenta a você a automação de teste de software usando Python, pytest, Mock e Selenium WebDriver.
- [The Testing Goat website] Um site com recursos e links para livros, artigos e tutoriais sobre TDD e teste automatizado com Python.
Atividade Prática
Desenvolvimento de jogos de Quiz com uso de TDD em Python
Objetivo do projeto
O objetivo do projeto é aplicar os conceitos de Testes em Python para produzir um mini-game de Quiz. Os alunos serão estimulados a utilizar a abordagem do Test-Driven Development (TDD), onde devem primeiro escrever os testes e depois desenvolver as funcionalidades que cumpram estes testes.
Materiais Necessários
- Python 3.x instalado
- IDE de escolha do aluno (Visual Studio Code, PyCharm, etc)
- Familiaridade com git e GitHub para versionamento de código
Descrição detalhada do projeto
O jogo deverá permitir que o jogador responda a uma série de perguntas de múltipla escolha. Cada pergunta terá apenas uma resposta correta e o jogador receberá um ponto para cada resposta correta. O jogo deve ser capaz de exibir ao jogador sua pontuação final após responder a todas as perguntas.
O foco principal do projeto será garantir que todos os aspectos do jogo estejam solidamente verificados através dos testes de unidade. Para isso, os alunos deverão se concentrar em criar testes para as seguintes funcionalidades:
- Inicialização do jogo
- Exibição de pergunta
- Seleção de resposta
- Verificação de resposta
- Calculo de pontuação
Os alunos devem dividir igualmente as funcionalidades entre os membros do grupo a fim de garantir que todos tenham uma experiência prática com a escrita de testes e, em seguida, codificar as funcionalidades correspondentes aos testes.
A atividade será realizada em grupos de 3 a 5 estudantes e cada grupo terá uma semana para concluir o projeto.
Passo a passo detalhado
- Formar grupos de 3 a 5 alunos e criar um repositório no GitHub para o projeto.
- Dividir as funcionalidades do jogo entre os membros do grupo.
- Antes de iniciar a codificação do jogo, focar em escrever testes unitários para cada funcionalidade.
- Após escrever os testes para uma funcionalidade, iniciar a implementação da referida funcionalidade.
- Checar que todos os testes passaram após a implementação da funcionalidade.
- Fazer um commit e push das alterações para o repositório do GitHub.
- Repetir os passos 3-6 para todas as funcionalidades do jogo.
- Certificar-se de que todos os testes foram aprovados e o jogo está funcionando de acordo com os requisitos antes da data de entrega do projeto.
Sobre o documento final
O documento será um relatório sobre o projeto que será feito individualmente. O relatório deve conter os seguintes tópicos: Introdução, Desenvolvimento, Conclusões e Bibliografia utilizada.
-
Introdução: Deve contextualizar o assunto dos "Testes em Python", sua relevância e explicar o propósito do projeto.
-
Desenvolvimento: Nesse tópico, o aluno deve explicar a teoria por trás dos testes de unidade em Python, que é o conceito chave abordado no projeto. Em seguida, explicar a atividade que realizaram em detalhes e apresentar a metodologia utilizada.
-
Conclusões: Aqui deverá ser escrita uma reflexão sobre os principais pontos do projeto, o que aprenderam com a realização do projeto e as principais dificuldades encontradas.
-
Bibliografia utilizada: Deve listar as referências que foram consultadas durante a execução do projeto, como livros, sites, vídeos, entre outros.
O relatório deverá ter, no mínimo, 4 páginas e, no máximo, 6 páginas. A formatação é livre. Entretanto, é necessário que os relatórios sigam uma estrutura lógica, que apresentem os conceitos de maneira clara e objetiva e que contem com uma linguagem formal e dentro dos padrões da norma culta.
Lembre-se: a ideia central é que todos os alunos aprendam a essência dos "Testes em Python" e consigam aplicá-la na prática.