0% acharam este documento útil (0 voto)
0 visualizações17 páginas

Python_Módulo_5_Qualidade_e_Testes

O módulo aborda a importância da tipagem, documentação e testes em Python, enfatizando o uso de Type Hints e docstrings para melhorar a clareza e a confiabilidade do código. Introduz conceitos como o princípio da responsabilidade única e o uso do comando 'assert' para validação de condições. Além disso, apresenta o Pytest como ferramenta essencial para a execução de testes automatizados, garantindo a qualidade do software.

Enviado por

mikael205
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações17 páginas

Python_Módulo_5_Qualidade_e_Testes

O módulo aborda a importância da tipagem, documentação e testes em Python, enfatizando o uso de Type Hints e docstrings para melhorar a clareza e a confiabilidade do código. Introduz conceitos como o princípio da responsabilidade única e o uso do comando 'assert' para validação de condições. Além disso, apresenta o Pytest como ferramenta essencial para a execução de testes automatizados, garantindo a qualidade do software.

Enviado por

mikael205
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Módulo 5: Qualidade e

Testes
Tipagem, Documentação e Assertividade

CA DE R N O PR ÁTI CO DE ESTU D OS ( PY TH O N 3 )
1. Type Hints (Tipagem de

Confiabilidade)

Mesmo que as fundações do Python o descrevam como dinâmico

(onde variáveis e retornos podem flutuar), os modernos Type Hints

(dicas) permitem formalizar visualmente os tipos exigidos para

inputs e o que vai ser devolvido. Editores com auto-complete os

adoram e linters detectam ameaças.

def calcular_media_ponderada(pesos: list[float]) -> float:


# A clareza desta assinatura previne desastres
return sum(pesos) / len(pesos)
2. Estruturas Avançadas de Tipos

A impressionante biblioteca interna 'typing' fornece recursos

flexíveis para assinaturas que transcendem dados simples.

Envolvimentos lógicos como Optional (indicador para quando a

função perfeitamente aceita que lhe injetem algo ou um vazio

None) e Callable.

from typing import Optional, Any

def caçar_usuario_sistema(codigo_id: int) -> Optional[dict]:


# Avisamos expressamente: Se não for achado no db, é None
pass
3. Os Contratos Docstrings (PEP

257)

A comunidade entende que função não documentada é terreno

nebuloso para qualquer engenheiro que vá inspecionar depois. A

Docstring deve ser o farol. Ela detalha em uma multi-string,

aninhada logo após a assinatura inicial, absolutamente tudo que diz

respeito ao que é, e ao que se pede.

def subtracao_precisa(minuendo, subtraendo):


'''
Realiza o cálculo síncrono de diferença.
Args:
minuendo: Base inteira principal.
subtraendo: Desconto a ser aplicado.
Returns:
O saldo algébrico limpo.
'''
return minuendo - subtraendo
4. A Filosofia SOLID em Funções

(Clean Code)

A lendária letra 'S' do manifesto designa o formidável Princípio da

Responsabilidade Única. A instrução determina: um trecho ou

função de código jamais deve fazer e responsabilizar-se por duas

coisas não atreladas ao mesmo tempo, senão a testabilidade é

corroída brutalmente.

# Padrão Tóxico: checar_pagamento_e_despachar_emails_e_logs()


# Padrão Vencedor e Seguro: isolar checar_pagamento(), após sucess
5. O Guardião Assert e a Inspeção

Rápida

O nativo comando 'assert' é a faca de detecção da linguagem

Python projetada em prol da validação incisiva e crua. Ele sentencia

que, se uma determinada asserção não se sagrar True, as sirenes

devem soar através de uma destrutiva AssertionError abortando os

trabalhos.

def garantir_existencia(nome_alvo):
return nome_alvo is not None

assert garantir_existencia('Caio') == True, 'O valor é perfeitamen


assert garantir_existencia(None) == False, 'Retorno nulo deveria b
6. Desbravando o Domínio Pytest

Liderança suprema absoluta dentro do ecossistema de validação

Python moderno, o Pytest age buscando arquivos nomeados

magicamente como 'test_*.py', caçando exaustivamente funções

encabeçadas como 'test_'. O executor orquestra e audita todos os

assertions, reportando brilhantemente o percentual validado.

def test_calculador_estatico():
dados_fixos_ambientais = [2.0, 4.0, 6.0]
# O sistema interno de hook do Pytest interceptará a verificaç
assert operacao_media(dados_fixos_ambientais) == 4.0
Laboratório Prático 1

Desafio - Refatoração com Type Hints: Capture a velha e

desprotegida função `def emitir_aviso(remetente): return

f'Aviso originado por {remetente}'` injetando nela todos os

indispensáveis type hints de assinatura. Assuma a entrada e

a saída invariavelmente restritas aos domínios das Strings.


Gabarito Recomendado

def emitir_aviso(remetente: str) -> str:


return f'Aviso originado solidamente por {remetente}'

Por que funciona? Engessamos o parâmetro formal usando

o sinal de dois pontos, e definimos a trilha de retorno

cravando o sinal clássico de seta que aponta para o tipo

prometido.
Laboratório Prático 2

Desafio - Moldando a Documentação (Google Style):

Materialize e aninhe uma docstring completíssima, seguindo a

diretriz moderna, que descreva abertamente as premissas de

uma função concebida para checar estritamente uma

propriedade CSS de visibilidade no front-end.


Gabarito Recomendado

def checar_status_visual(id_seletor: str) -> bool:


'''Analisa o DOM e extrai visibilidade frontal ativa.

Args:
id_seletor (str): Referência absoluta do alvo mapeado n

Returns:
bool: True se confirmadamente visual, False se mascarad
'''
pass

Por que funciona? O escopo da docstring consolida em

tópicos segregados (Args e Returns) a especificação do

manual prático com legibilidade humana formidável e fácil

parser.
Laboratório Prático 3

Desafio - Cercando Comportamentos de Risco e

Exceções: Tire do papel a elaboração da função perigosa de

dividir(numerador, divisor). Escale-a para emitir explosão via

'raise ValueError' em situações de denominação que

configure um inaceitável divisor zerado. Construa um bloco try

exterior auditando esse alerta com um assert cirúrgico.


Gabarito Recomendado

def processo_de_divisao(a, b):


if b == 0: raise ValueError('Catástrofe: divisão anulada e
return a / b

try:
processo_de_divisao(55, 0)
except ValueError as pacote_erro:
assert str(pacote_erro) == 'Catástrofe: divisão anulada e e

Por que funciona? É dever imperativo isolar fluxos

arriscados, avaliá-los e provar sob ambiente de laboratório

try/catch que a malha defensiva de exceções disparou

corretamente.
Laboratório Prático 4

Desafio - Higienização Pura e Exclusão de Side-Effects:

Anule o perigo compartilhado visível na refatoração requerida

da peça: `def adicionar_contagem(): global saldo_x; saldo_x

+= 1` blindando-a definitivamente sob os paradigmas

blindados da programação estrita em funções isoladas sem

nenhum contato colateral global.


Gabarito Recomendado

def adicionar_contagem_isolada(saldo_recebido_x: int) -> int:


return saldo_recebido_x + 1

# Gerenciamento isolado do ciclo


saldo_x_seguro = adicionar_contagem_isolada(saldo_x_seguro)

Por que funciona? O vício fatal de efeitos colaterais

espalhados foi expurgado, repassando o controle direto via

retorno seguro estrito. Permite simulações atômicas de

testes.
Laboratório Prático 5

Desafio - Iniciação a Arquitetura Pytest: Formule um

minucioso caso arquitetado na nomenclatura

'test_checar_validador_status()' integralmente desenhado

com o propósito rigoroso de estressar intensamente a função

`is_ok(status_requisicao)` gerada a princípio no laboratório do

Módulo 1.
Gabarito Recomendado

def test_checar_validador_status():
# Trilogia Pytest: Arranjo de cenário, Ação, Asserção impla
assert is_ok(200) is True
assert is_ok(404) is False
assert is_ok(500) is False

Por que funciona? Delegando o poder ao interpretador e

hooks mágicos da ferramenta pytest, construímos a pirâmide

basilar garantindo o pilar sólido da qualidade das features

sem ruídos e com total rastreabilidade do processo.

Você também pode gostar