BDD em código produtivo com Python

41 views
Skip to first unread message

Douglas Cardoso

unread,
Jun 11, 2026, 9:16:59 AMJun 11
to Python Brasil
Olá, parabéns aos idealizadores do projeto. Tenho visto muitas discussões produtivas e respeistosas (coisa que não vejo em outras comunidades). Sou professor de automação de testes da PUC Minas e estou explorando uma nova abordagem em BDD que chamo de 'narrativa executável'. Uso está abordagem para ensinar automação de testes aos meus alunos e estou buscando opiniões sinceras de especialistas em Python para refinar e melhorar a abordagem de ensino e o framework Python desenvolvido. O framework que uso nas minhas aulas se chama Guará, é open source e tem contribuição da comunidade Python. Ele usa o padrão de projetos Page Transactions onde o foco da automação sai da UI e se volta para a jornada do usuário.
O cenário de testes implementado no padrão ficaria algo como (simplificado para facilitar a leitura):

app.given(TheUserIsLoggedIn, with_name='john.doe').when(TheUserBuysAProduct, with_name='cellphone').then(TheSystemShouldReturn, 'done')

Note que o cenário é todo escrito em Python puro, mas mantém a narrativa de negócio. Como uso Python, posso usar todas as tecnicas de programação OO como herança, sobrecarga de métodos, sobreescrita de método, etc.. Portanto, consigo escrever o código em português (e qualquer outra língua) usando herança

app.dado(UmUsuárioLogado, com_nome='john.doe').quando(OUsuarioCompraUmProduto, com_nome='cellphone').entao(OSistemaDeveRetornar, 'done')`

Posso usar linguagem ubíqua reforçando a prática de DDD (Domain-Driven Design) em um projeto.

eduapp.sabido_que(ExistaUmAluno, de_nome='Fulano de Tal').uma_vez_que(OAlunoSeInscreveNaMateria, de_nome='Matemática').logo(EleDeveEstar, 'Matriculado')

Posso criar novas asserções que alimentam o método `then` (e suas variações). Enfim, o testador é livre para estender o framework como ele queira.

Porém, dadas as possibilidades do framework, tenho explorado uma abordagem diferente do BDD que não passa pelos testes. Note que eu posso usar o cenário como parte do meu código fonte usando uma metalinguagem que estabelece um contrato onde given é a pré-condição, when a execução e then é a pós-condição. Considere a função abaixo como parte de uma implementação de uma CLI.

def inscrever_aluno_na_materia(aluno, materia):
    eduapp.sabido_que(ExistaUmAluno, de_nome=aluno) \
    .uma_vez_que(OAlunoSeInscreveNaMateria, de_nome=materia) \
    .logo(EleDeveEstar, 'Matriculado')

chamando a função por uma CLI no terminal ficaria como:

python main.py inscrever-aluno-na-materia --aluno 'Fulano de Tal' --materia Matemática

Gostaria da opnião da comunidade sobre essa nova abordagem BDD e sobre o framework.

Notas:
- Eu pesquisei outras ferramentas BDD onde se escreve o código puro, como JGiven (Java), mas ele ainda é focado no teste em si.
- A camada extra não elimina a necessidade de services, repositories, models... mas deixa o código fonte mais orientado à intenção do negócio. Ele também vira a propria documentação e fonte de verdade.

Acham que a abordagem faz sentido?
A intenção do código mais clara com a camada extra?
Deixem comentários livres, por favor

Muito obrigado!

Vou deixar alguns links extras caso tenham interesse no meu trabalho. Abraços!

Pessoais

Sobre o projeto

Jackson Osvaldo

unread,
Jun 12, 2026, 10:50:45 AMJun 12
to Python Brasil
Fala, Douglas. Bão demais?

Mano, super legal a abordagem e, sim, faz muito sentido. Dia desses estava caçando coisa em BDD e achei dois trem bem legais:

https://www.specflow.com/ : Uma abordagem ágil pra criação de cenários "testáveis" em prudutos;
- https://www.parlant.io/blog/inside-parlant-guideline-matching-engine/ - Uma lib chamada Parlant que, pra mim, usa BDD como core da aplicação.

O que queria perguntar, mas pra incitar uma troca de ideias mesmo, é: acha que faria sentido, também, ter cenários de testes que eu pudesse automatizar com fluxos de ML/DL/AI? Uso muito esses cases BDD pra testar minhas features e é massa demais.

Qualquer coisa, vamos trocar uma ideia sobre isso tudo e, quem sabe, publicar algumas coisas (tô tentando voltar com a carreira acadêmica hehe).
Forte abraço. <3

Douglas Cardoso

unread,
Jun 12, 2026, 2:57:16 PMJun 12
to python...@googlegroups.com
Oi Jackson, tudo certo e você? Vlw pela resposta. Achei interessante a guinada que o SpecFlow deu/está dando. Eu trabalhei com ele entre 2017-2019 (não lembro ao certo) e ainda era uma ferramenta ao estilo Cucumber, mas com implementação em C#. Parece que está virando um workflow para orquestração de IA. O Parlant eu não conhecia, mas parece ser voltado para A tb.

Sobre a sua pergunta, o framework é uma meta-línguagem que descreve a intenção do código de produção. Ele é agnóstico à implementação. Eu já usei para descrever cenários de teste, domínio de aplicações e pipelines de LLM (fiz umas PoCs). O uso é de sua escolha. O que estou para testar ainda é a utilização dele em larga escala e usando agente de AI para descrever a especificação do código. Como o framework propõe um forma estruturada de desenvolvimento (parecido com um Command Bus Pattern) ele casa bem com a cama determinística de uma pipeline LLM. Acho que combina bem Spec-Driven design.

Veja que o FW é usado para escrever código em produção (pode ser usado pra teste tb, mas meu foco agora é produção). Algumas pessoas têm confundido ele com uma ferramenta de automação apenas, mas ele tem potencialidades além de automação de testes. Eu fiz um projeto pequeno de uma CLI de universidade usando o FW pra descrever o código. Ainda precisa de lapidação pra melhorar a legibilidade, mas eu gostei do resultado. A intenção do código ficou mais explícita.


Estou explorando essa abordagem para fins acadêmicos mesmo e estou pensando em publicar algo em algum periódico. Te adicionei no IN pra conversamos mais sobre o assunto.

--
 
Abraços,
Douglas Cardoso


--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/5a586d14-de54-4260-acf8-19e0412f3742n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages