CSE 111: Programação com Funções

S03 - Atividade Guiada de Programação: Testando e Corrigindo Funções

Visão Geral

Para esta atividade, você irá programar enquanto assiste um vídeo do instrutor, que guiará cada passo da tarefa abaixo. Certifique-se de pausar o vídeo ou revisar partes dele, caso necessário, para concluir a atividade por completo.

Seu instrutor publicará um link para o vídeo no Microsoft Teams.

Contexto

A maioria das pessoas ao redor do mundo hoje tem pelo menos dois nomes: um sobrenome e um nome. Geralmente escrevemos o nome de uma pessoa seguido do seu sobrenome. Entretanto, quando um computador lista nomes em ordem alfabética, é conveniente listar primeiro o sobrenome e então o nome, dessa forma:

Ao escrever um programa que organiza nomes em ordem alfabética, geralmente é útil ter as três funções a seguir.

Um programador já escreveu essas três funções. Entretanto, há erros em pelo menos duas das três funções.

Programa

Escreva três funções de teste chamadas test_criar_nome_completo, test_extrair_sobrenome, e test_extrair_primeiro_nome. Cada uma das funções de teste testará uma das três funções de programa escritas anteriormente. Use o pytest para executar as funções de teste e encontrar e corrigir os erros, se houver, nas funções de programa.

Requisitos

  1. Escreva a função test_criar_nome_completo para testar a função criar_nome_completo usando diferentes tipos de nomes, incluindo nomes longos, nomes curtos e nomes com hífen, e corrija qualquer erro presente na função criar_nome_completo.
  2. Escreva test_extrair_sobrenome para que ele teste extrair_sobrenome com vários nomes, incluindo nomes longos, nomes curtos e nomes com hífen.
  3. Escreva test_extrair_primeiro_nome para que ele teste extrair_primeiro_nome com vários nomes, incluindo nomes longos, nomes curtos e nomes com hífen. Corrija o erro na função extrair_primeiro_nome.

Desafios Adicionais

Abaixo está uma lista de desafios adicionais que você pode fazer. Seu instrutor lhe guiará por pelo menos um deles. Fique à vontade para realizar os demais.

  1. No Brasil, os endereços postais devem ser escritos desta forma: rua, número, bairro, cidade - estado, CEP
    Por exemplo: Av. Centenário, 2200, Mangueirão, Belém - PA, 66640-658

    Baixe e salve este arquivo Python chamado endereco.py. Abra um novo arquivo Python chamado test_endereco.py e escreva uma função de teste chamada test_extrair_cidade que verifica se a função extrair_cidade funciona corretamente.

  2. Escreva uma função de teste chamada test_extrair_estado que verifica se a função extrair_estado funciona corretamente.
  3. Escreva uma função de teste chamada test_extrair_cep, que verifica se a função extrair_cep funciona corretamente.

Instruções

  1. Crie uma pasta para armazenar o programa da Atividade Guiada de Programação desta semana.
  2. Baixe o arquivo python nomes.py e salve-o na pasta do projeto que você acabou de criar.
  3. Abra a pasta que você acabou de criar no VSCode.
  4. Encontre o vídeo que seu instrutor publicou para esta tarefa e crie o código junto com ele para concluir cada um dos requisitos. Analise os requisitos em ordem com o instrutor em vez de pular para etapas mais complicadas para garantir que você não perca nenhuma explicação.
Link de Vídeo Alternativo

Além do link que seu instrutor publicou, você também pode assistir ao seguinte passo a passo do código:

Recursos Adicionais

Você pode usar esses recursos adicionais para se aprofundar nos estudos.

Exemplo de Solução

Além do vídeo do instrutor, você também pode visualizar esta solução. (Ela pode ser um pouco diferente do código final que você e seu instrutor criaram.)

Documentação Útil O vídeo Introdução a Testes Automatizados com Pytest mostra a criação de funções de teste usando o pytest para executá-las.
Procedimento de Teste

Antes de corrigir os erros nas funções criar_nome_completo e extrair_primeiro_nome, o pytest imprimirá uma saída semelhante a esta:

> python test_nomes.py
  ======================= test session starts======================
  platform win32 -- Python 3.13.4, pytest-8.4.1, pluggy-1.6.0 --
  rootdir: C:\Users\cse111\week03
  collected 3 itens
  test_nomes.py::test_criar_nome_completo FAILED                 [ 33%]
  test_nomes.py::test_extrair_sobrenome PASSED            [ 66%]
  test_nomes.py::test_extrair_primeiro_nome FAILED             [100%]
  ========================== FAILURES ============================
  C:\Users\cse111\early-functions\docs\week03\teach_solution.py:
  AssertionError: assert 'Lopes-João;Ava' == 'Lopes-João; Ava'
  C:\Users\cse111\early-functions\docs\week03\nomes.py:31:
  ValueError: substring not found
  ================= 2 failed, 1 passed  in 0.14s ==================

Após corrigir os erros nas funções criar_nome_completo e extrair_primeiro_nome, o pytest imprimirá uma saída semelhante a esta:

> python test_nomes.py
  ======================= test session starts======================
  platform win32 -- Python 3.13.4, pytest-8.4.1, pluggy-1.6.0 --
  rootdir: C:\Users\cse111\week03
  collected 3 itens
  test_nomes.py::test_criar_nome_completo PASSED                 [ 33%]
  test_nomes.py::test_extrair_sobrenome PASSED            [ 66%]
  test_nomes.py::test_extrair_primeiro_nome PASSED             [100%]
  ====================== 3 passed in 0.12s =======================
Gráfico de Chamadas

O gráfico de chamadas a seguir mostra as chamadas e retornos de função no exemplo de solução para esta tarefa. Neste gráfico de chamadas, vemos que o computador começa a executar o funções de teste de exemplo chamando a função pytest.main. Ao executar a função pytest.main, o computador chama a função test_criar_nome_completo, que chama a função criar_nome_completo. Então, enquanto ainda executa pytest.main, o computador chama a função test_extrair_sobrenome, que chama a função extrair_sobrenome. Então, enquanto ainda executa pytest.main, o computador chama a função test_extrair_primeiro_nome, que chama a função extrair_primeiro_nome.

Gráfico de chamadas de função para esta tarefa

Envio

Por favor, pause e assista novamente a quaisquer partes do vídeo do instrutor necessárias até que você tenha concluído toda a atividade e seu programa funcione da mesma forma que o do instrutor. Quando tiver terminado:

Links Úteis: