Primeiras aulas do curso TDD no Django 3: Desenvolvimento guiado por testes

TDD no Django 3: Desenvolvimento guiado por testes

Fundamentos do TDD - Apresentação

Olá, meu nome é Guilherme Lima e eu serei o seu instrutor no curso TDD no Django 3: Desenvolvimento guiado por testes. Nesse treinamento vamos aprender a escrever diferentes tipos de testes, sejam eles testes funcionais ou testes de unidade. E como que podemos desenvolver as nossas URLs, modelos e views com base nos nossos testes, sendo guiados através dos nossos testes.

Fazendo esse treinamento - esse curso - vamos desenvolver uma aplicação chamada Busca Animal onde eu digito o nome de um animal, por exemplo, gato, quando eu dou “pesquisar” ele vai me mostrar o nome do animal que eu pesquisei, se ele é um predador, se ele é venenoso e se ele é doméstico.

Essa é a aplicação que vamos desenvolver. Se eu digito, por exemplo, urso, ele vai me mostrar: o urso é um predador, ele não é venenoso, mas ele também não é doméstico.

Então, fazendo esse curso vamos desenvolver essa aplicação. Quais são os pré-requisitos para criar nesse curso e você ter um bom resultado no seu treinamento? É importante que você tenha familiaridade com a linguagem de programação Python, e que você já tenha utilizado o Django.

Porém, se você já é um profissional muito experiente, já escreve muitas linhas de código e o teste é algo que já faz parte da sua rotina como desenvolvedor, talvez esse curso não seja recomendado para você, porque vamos consolidar os nossos fundamentos no que é um desenvolvimento guiado pelos testes. Então, sabendo disso, vamos começar?

Fundamentos do TDD - TDD na prática

Vamos iniciar, então, os nossos estudos em relação ao TDD. A primeira etapa do TDD, antes de escrevermos qualquer linha de código, é encontrar uma forma de testar o aplicativo, alguma funcionalidade que queremos criar. Para exemplificar isso, vamos criar o seguinte programa.

Eu quero criar uma função que descobre a idade de uma pessoa em um determinado ano. Então, nós vamos precisar de algumas informações, duas informações para ser preciso. Primeiro, o ano de nascimento da pessoa, e segundo, qual é o ano que ela quer saber a idade dela. Pode ser o ano atual ou um ano futuro. Com base nessas informações, nós retornamos a idade da pessoa.

Vou colocar aqui o meu exemplo. Eu nasci no ano de 1991, e quero saber: em 2050, quantos ano eu terei? Em 2050, eu terei 59 anos. Legal. Para nós humanos, é fácil entender isso, mas como que nós criamos essa função utilizando a metodologia do TDD e garante que esse teste vai passar e nós vamos seguir todos os passos do TDD e vamos ter essa afirmação verdadeira que se eu nasci no ano de 91, e coloquei o ano de 2050, o resultado dessa função é 59.

Vamos ver isso na prática? Vou criar um novo folder, uma nova pasta que vou chamar de tdd_idade, vou abrir o VS Code, arrastar essa pasta do tdd_idade para dentro, e vou criar um novo arquivo no VS Code, um new file, chamado de idade.py

Então, primeira coisa, o que fazemos no TDD? Vamos encontrar uma maneira de testar isso que estamos querendo criar. Então, eu vou afirmar, vou colocar aqui um assert que diz que descobrir_idade com esse cenário de testes: 1991 e 2050, então, 1991,2050) == 59. Salvei, “Command + J”, abriu meu terminal.

Vou executar python idade.py. Quando eu executo, nós temos um primeiro erro, um NameError, e ele diz assim: o name descobrir_idade não é definido, e faze sentido, nós não criamos essa função para descobrir idade, então vamos criar essa função chamada descobrir_idade, não vou passar nenhum parâmetro e temos aqui um pass, uma função mais básica do Python.

python idade.py, executando mais uma vez no terminal, nós temos um outro erro, um TypeError. Ele fala assim: descobrir_idade, não foi passado nenhum argumento, e dois argumentos são esperados, que é o 1991, que é o ano de nascimento, vou colocar aqui em def descobrir_idade (ano_nascimento, ano) que é o ano que a pessoa quer saber a idade dela.

Salvei. No meu terminal, executando mais uma vez, nós temos mais um erro. Ele fala assim: erro de afirmação. Essa afirmação não é verdadeira. Se eu passo descobrir_idade(1991,2050) não é 59 e, de fato, não é mesmo. A nossa função não retorna nada. Então, vou colocar na segunda linha um return onde vamos executar esse cálculo: “ano-ano de nascimento”.

Limpando o terminal e executando. Nenhuma mensagem foi exibida, vou executar mais uma vez. Maravilha! Nada foi exibido. O que eu vou fazer: para nós executarmos essa função, vou criar outra coisa, vou criar um print, por exemplo, para mostrar a idade do meu irmão em um determinado ano. Então, print(descobrir_idade) do meu irmão, eu vou colocar, por exemplo, que meu irmão nasceu em 1996 e eu quero saber quantos anos ele vai ter em 2060, por exemplo. Isso vai ser exibido no nosso console.

“Command + J”, aqui no nosso terminal, quando eu dou um python idade.py, 64 anos. Vou minimizar um pouco o terminal só para conseguirmos ver. Agora sim, olha só que interessante: nós criamos essa função de descobrir a idade utilizando a metodologia do TDD, nós escrevemos um teste, esse teste falha e nós vamos modificando o nosso código até a medida que esse teste passe.

Depois até podemos melhorar o nosso código, mas observe que nós ensinamos o nosso computador a realizar o teste, a verificar se de fato essa função tem o comportamento que nós esperamos desde o início.

No próximo vídeo, vamos fazer uma análise dessas etapas que executamos, e encontrar algumas vantagens de desenvolver uma aplicação utilizando a metodologia do TDD.

Fundamentos do TDD - O ciclo do TDD

Criamos uma função seguindo um conjunto de testes para verificar se o comportamento que esperávamos daquela função fosse atendido, e passamos no nosso teste. Por isso, se observarmos, houve um ciclo nas atividades que nós criamos.

O primeiro ciclo foi: nós escrevemos um teste que falhou, depois colocou um código, criou um código que fosse aprovado naquele teste, depois podemos refatorar e melhorar o nosso código. Se observarmos esses três ciclos, eles têm nomes definidos: Red, Green e * Refactor*, Vermelho, Verde e Refatorar, no TDD.

Lembrando que esse é o menor ciclo do TDD, essas três etapas. Então, essas são as etapas básicas do TDD. Sempre que quisermos criar uma aplicação seguindo essa metodologia, nós vamos ter essas etapas.

Mas, qual a vantagem de utilizar a metodologia TDD? Eu vou listar algumas vantagens para vocês. A primeira, o nosso código vai ficar muito mais objetivo, nós vamos desenvolver de fato o nosso código para que ele seja aprovado naquele teste, ou seja, para atender um determinado objetivo final.

Depois, menos ocorrência de erros. O risco de apresentar erros na nossa aplicação diminui. Isso não significa que a nossa aplicação não tenha mais erro, não vá conter nunca mais nenhum erro. Não! Isso não existe. Nossa aplicação pode apresentar alguns erros, mas a ocorrência de erros quando desenvolvermos utilizando o TDD diminui.

Outra coisa, refatoração, quando precisarmos refatorar, editar ou dar alguma manutenção em um código que foi criado com testes, vai ficar muito mais fácil também, porque, geralmente quando modificamos uma parte do sistema, outras partes do sistema podem ser alteradas também.

Se nós criamos uma aplicação, uma funcionalidade, com base no TDD, vamos saber exatamente onde quebrou e como que consertamos, em qual momento está, sem precisar ficar debugando com muitos detalhes.

Outra coisa interessante é o tempo. O que acontece? A sensação que temos é que seria muito mais fácil criar essa função de descobrir_idade de uma vez e já colocar os print com algumas idades que queremos descobrir, porém, se observarmos em um escopo maior, em uma aplicação maior, nós podemos ter algumas distrações do tempo.

Então, nós começamos desenvolvendo alguma determinada funcionalidade, aí nós achamos outra coisa legal e queremos inserir no código, e acabamos saindo do objetivo principal que queríamos alcançar. Então, o TDD garante que o tempo gasto será em cumprir os objetivos principais daquela aplicação, daquele código. Esse é um ponto importante também.

Outra coisa: cumpre os requisitos, ou seja, o usuário, ou a pessoa que precisa daquela aplicação, precisa daquele software, tem algumas requisições, e nós vamos cumprindo essas requisições com base em testes.

Mais para frente, nós vamos realizar isso, na prática, mas o que acontece é o seguinte, vamos pegar a história do usuário e ele vai falar: eu preciso de uma função que descubra a idade de uma pessoa, e com base nessa história, nós vamos desenvolvendo o nosso código, então existe uma aliança entre as histórias do usuário e o nosso código também.

E para finalizar, uma das mais importantes vantagens de utilizar o método TDD é a melhoria incremental. Cada teste que for aprovado, significa que uma parte daquele projeto muito grande que temos foi finalizada, então já podemos passar para outra parte, para outro objetivo. Então, nesse texto ele até diz, cada teste aprovado será uma pequena vitória na nossa aplicação. Isso é bem legal.

Sobre o curso TDD no Django 3: Desenvolvimento guiado por testes

O curso TDD no Django 3: Desenvolvimento guiado por testes possui 124 minutos de vídeos, em um total de 49 atividades. Gostou? Conheça nossos outros cursos de Python em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Python acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas