Awesome CopilotAdventures

Documentação do produto verificada

Refatore o código existente da biblioteca Python com segurança

sorted, compreensões e next do Python podem expressar a intenção com clareza, mas têm semânticas diferentes de cópia e mutação. Preserve o comportamento do qual os usuários dependem.

Resumo do laboratório

Duas bandejas de peças passam por mecanismos conectados com caminhos de retorno separados.

Ilustração conceitual original (SVG)

Preserve se os chamadores observam mutação ou uma nova lista.

Em resumo Sua rota
Nível e tempo 300; 60 minutos (estimativa de facilitação)
Ação inicial Teste duplicatas, empates e mutação antes de simplificar a iteração.
Materiais do aluno Baixe 05-python.zip
Workspace Abra a raiz do kit extraído; execute a baseline de library relativa a essa raiz
Verificação inicial esperada Os testes unittest existentes são descobertos e passam.
Ajuda de configuração Baixe, extraia, Git local e GitHub opcional

[!NOTE] sorted e list.sort não são contratos intercambiáveis.

Conceitos · Primeira tarefa · Lista de evidências · Redefinir

Objetivos de aprendizagem

  • Identifique o que a filtragem/ordenação realmente retorna e modifica.
  • Preserve a semântica de caixa e de resultado ausente.
  • Use caracterização antes de substituir laços.

Antes de começar

Prepare 05-python usando o guia de configuração. Execute os comandos a partir de library na fixture de refatoração Python incluída.

Conceitos e casos de uso

Código existente Armadilha semântica
A busca de usuários por substring usa lower() Mudar para uma verificação de pertencimento que diferencia maiúsculas e minúsculas altera os resultados
Um bubble sort ordena os nomes correspondentes Substituí-lo por um conjunto perde duplicatas e ordem
sort_loans_by_due_date modifica a lista de empréstimos sorted(...) retorna uma nova lista em vez disso
A consulta retorna None para ID ausente next(...) sem valor padrão lança exceção
As entidades retornadas são objetos compartilhados Uma cópia profunda pode alterar as suposições dos chamadores

Cenário do exercício

Simplifique um método de busca de usuários ou de ordenação de empréstimos sem alterar o contrato observável. A análise de desempenho é um exercício separado; não prometa ganhos de velocidade.

Tarefa 1 - Estabeleça os testes e o comportamento atual

python -m unittest discover -s tests -p "test_*.py" -v
  1. Leia os métodos do repositório e seus chamadores.
  2. Caracterize entrada vazia, IDs ausentes, nomes com mistura de caixa, nomes de exibição duplicados, datas iguais e mutação da lista original.
  3. Registre as suposições sobre data/hora. Use datas controladas nos testes.
  4. Mantenha a leitura/gravação de JSON fora da primeira refatoração, a menos que seja explicitamente testada.

Tarefa 2 - Compare alternativas com Ask

Compare the existing manual search/sort with comprehension, sorted, list.sort,
and next alternatives. Explain which returns a new list, which mutates, how ties
are handled, and what missing-result behavior must be preserved. Do not edit.

Não presuma que uma expressão de uma linha seja mais clara ou que o comportamento do repositório de outra linguagem se aplique aqui.

Tarefa 3 - Planeje e implemente um recorte

  1. Em Plan, escolha um método e liste a semântica preservada e os testes.
  2. Peça a Agent que implemente somente esse recorte.
  3. Inspecione tipo de retorno, identidade, ordenação e mutação.
  4. Execute os testes direcionados e a suíte existente.
  5. Introduza uma diferença deliberada, como substituir a ordenação no próprio objeto por uma cópia ordenada retornada. Confirme que o teste de caracterização apropriado falha.
  6. Restaure a refatoração correta e registre as limitações.

Verifique seu trabalho

  • O comportamento para ID ausente permanece inalterado.
  • A normalização da busca e a ordenação permanecem iguais.
  • Resultados modificados no próprio objeto versus copiados são testados explicitamente.
  • A ordem de chaves iguais e as duplicatas não são perdidas acidentalmente.
  • A mutação negativa falha e os comportamentos sem relação com a tarefa continuam passando.

Solução de problemas

Se apenas instantâneos forem comparados, você pode deixar de detectar a mutação de objetos. Se a refatoração alterar o tratamento de erros, classifique-a como uma correção separada. Se as importações falharem, execute a partir de library em vez de adicionar edições improvisadas de sys.path.

Prática independente

Refatore uma operação de atualização preservando exatamente quando save_loans e load_data são invocados. Teste o comportamento de registro ausente sem inventar uma nova política.

Restauração

Salve as evidências, restaure somente o método e os testes selecionados na cópia descartável e feche a sessão de aprendizagem. Deixe os interpretadores compartilhados e os dados de origem intactos.

Referências oficiais

Buscar

Busca em português do Brasil. Os caminhos e os exemplos executáveis mantêm o texto original.