Como foi construído
Arquitetura, decisões, testes — e o papel da IA no desenvolvimento
Sem instalação, nem para desenvolver
A primeira decisão foi não ter etapa de compilação. O código é JavaScript com módulos ES nativos, que o navegador carrega direto; a interface é HTML e CSS sem framework; o diagrama é SVG gerado por código. Não há Node, npm, empacotador nem dependência externa. Um servidor de arquivos estáticos — o do Python que vem no macOS basta — é tudo que o desenvolvimento exige, e o GitHub Pages publica os arquivos exatamente como estão no repositório.
Isso foi uma restrição do ambiente que virou princípio: uma ferramenta feita para dispensar instalação não deveria exigir instalação para ser modificada. Quem quiser mexer clona o repositório e abre.
Camadas
Os 4.500 linhas de código dividem-se em quatro camadas, e a dependência só aponta para baixo:
| Camada | Módulos | Responsabilidade |
|---|---|---|
| core | model, simulate, turing,
convert, regex, grammar,
operations, examples |
o modelo de dados e todos os algoritmos; não toca no DOM |
| io | jff, image |
leitura e gravação do .jff; exportação de imagem |
| render | geometry, canvas, layout |
cálculo das curvas, desenho em SVG, reposicionamento |
| ui | app |
menus, eventos, painéis, desfazer |
A camada core não sabe que existe uma tela. Por isso os
algoritmos — subconjuntos, minimização, Thompson, eliminação de estados,
a simulação da MT — são testáveis sem interface e reaproveitáveis por
outro programa.
Decisões que valem registrar
Seguir as aulas, não o JFLAP. Onde a definição do
curso difere da do JFLAP, a ferramenta segue o curso e mantém a do JFLAP
como alternativa. O caso mais visível é a fita da máquina de Turing, com
o Δ de Menezes.
Reimplementar em vez de derivar. A licença do JFLAP permite modificações, mas impõe condições — não cobrar, entregar o código à mantenedora quando pedido. Uma reimplementação independente pôde ser publicada sob MIT, sem amarras, e a Univali pode adotá-la, modificá-la e redistribuí-la sem pedir a ninguém. O que se reaproveitou do JFLAP foi só o formato de arquivo.
Conversões de resultado direto. O JFLAP faz o aluno construir o DFA passo a passo e corrige; o AutomataLab calcula e mostra. É a maior diferença pedagógica entre os dois e está registrada como trabalho futuro — os algoritmos que corrigiriam o aluno já existem, falta a interface guiada.
Desfazer cobre tudo. As conversões substituem o autômato inteiro. Sem um histórico de edição, um clique errado perderia o trabalho; por isso o desfazer guarda até 60 estados, incluindo o nome do arquivo.
O evento close do diálogo não é
confiável. Descobriu-se que há navegadores embutidos que não o
disparam, o que travava a interface. Os diálogos passaram a ser
resolvidos pelos próprios botões, com o evento apenas como rede de
segurança. É o tipo de detalhe que só aparece testando de verdade.
Testes
Há 219 testes automatizados, que rodam no próprio
navegador em tests.html — sem
ferramenta externa, com um runner de 60 linhas. Cobrem o modelo, o
formato .jff (com fixtures dos três dialetos), a simulação
de autômatos finitos, as conversões, expressões regulares, gramáticas,
Moore e Turing.
Os testes mais fortes são os de equivalência: em vez
de conferir uma cadeia, provam que dois autômatos reconhecem a mesma
linguagem. É assim que se verifica que a minimização preserva a
linguagem, que ER → autômato → ER volta ao mesmo lugar, e que o
.jff gravado e relido se comporta igual ao original.
Para a máquina de Turing, a fixture é a máquina do slide 10, e um dos
testes afirma que aabb aceita em exatamente 14 passos com a
fita [Δ] a a b b no passo zero — a mesma sequência dos
slides.
O papel da IA
O código, os testes e boa parte do desenho dos algoritmos foram escritos com uso intensivo de um assistente de IA, sob direção e revisão humanas. O histórico do repositório registra a coautoria em cada commit.
O que foi decisão humana: o problema a resolver, o escopo e a ordem das fases, a exigência de seguir a convenção das aulas, a validação com os arquivos reais da disciplina, a escolha de publicar em aberto sob MIT, e a decisão de reimplementar em vez de derivar do JFLAP. O que foi execução assistida: a tradução dessas decisões em código e em testes.
Registra-se isso aqui porque é uma forma de autoria diferente da tradicional, e é melhor que seja conhecida do que descoberta. A ferramenta é avaliável pelo que faz — os testes, os arquivos das aulas que abre, o exemplo do slide que reproduz — e não pela forma como foi digitada.
Trabalho futuro
Em ordem de valor para a disciplina:
- Máquinas de Mealy — pequena: é Moore com a saída na transição.
- Modo interativo das conversões — o aluno constrói, a ferramenta corrige. Os algoritmos existem; falta a interface.
- Autômatos com pilha.
- Máquinas de Turing com várias fitas.
- Gramática como tipo de documento próprio, com CYK, LL(1) e LR(1).
O código está em https://github.com/andersonpiresme/automatalab, sob MIT.