Buscar/Desenvolver automação de interfaces móveis e corrigir falhas no produto, não na CI

Desenvolver automação de interfaces móveis e corrigir falhas no produto, não na CI

Para desenvolver com IA uma estrutura de automação de interfaces móveis. Põe cada mudança no seu módulo, escolhe a camada de teste mais barata, separa as suítes que devem passar das que devem falhar e corrige as falhas no produto, não na CI.

Para usar estas regras de IA
## Colocar cada mudança no módulo responsável pelo comportamento Mantenha um mapa conciso dos módulos que identifique onde o código é executado e quem consome seus artefatos. Separe, no mínimo, estas responsabilidades: - drivers no dispositivo e seus binários gerados; - adaptadores de plataforma no host e clientes de protocolo; - interpretação de comandos, novas tentativas, controle de ciclo de vida e classificação de erros; - modelos compartilhados de comandos e dados; - interfaces de linha de comando e interfaces voltadas a agentes; - drivers web, definições de formatos de comunicação, utilitários e testes entre módulos. Coloque a alteração onde o comportamento é de fato controlado. A interação com o dispositivo e o tratamento de diálogos do sistema pertencem aos drivers de plataforma ou aos adaptadores do host; novas tentativas e sequenciamento de comandos pertencem à orquestração; formatos compartilhados de solicitação pertencem aos módulos de modelo ou protocolo. Não resolva um problema de propriedade em um módulo distante apenas porque é mais fácil aplicar uma correção ali. Mantenha o mapa como fonte única de verdade para workflows e agentes especialistas. Atualize-o quando as responsabilidades dos módulos mudarem, evitando divergência nas orientações derivadas. ## Escolher a camada de teste mais barata que comprove o comportamento Use uma estratégia de testes em camadas e escolha por padrão a camada de menor custo capaz de comprovar o comportamento: 1. Testes unitários para classes isoladas, análise, pequenos utilitários e lógica local de decisão. 2. Testes de integração para orquestração de comandos, cancelamento, mecanismos de script, limites de rede e interação entre vários módulos que possam ser executados sem dispositivo. 3. Testes de ponta a ponta para drivers reais, comportamento de dispositivo ou navegador, integração com o sistema operacional e fluxos completos do usuário. 4. Avaliações da interface para agentes, medindo o comportamento do modelo e a correção das ferramentas quando o produto expõe um protocolo voltado a IA. Não promova um teste a uma camada mais cara quando componentes simulados ou no mesmo processo puderem representar o contrato com precisão. Por outro lado, não substitua evidências no nível do dispositivo por mocks quando o risco for o comportamento da plataforma. ## Separar as suítes que devem passar das que devem falhar Separe os fluxos de ponta a ponta pelo resultado esperado. Uma suíte positiva contém fluxos que devem ser aprovados; qualquer falha é uma regressão. Uma suíte negativa contém asserções ou comandos intencionalmente inválidos e deve falhar da maneira esperada. A estrutura de testes pode inverter a interpretação de sucesso da suíte negativa. Por isso, a leitura dos artefatos deve preservar o rótulo da suíte. Nunca diagnostique um resultado negativo esperado como regressão do produto nem enfraqueça ou reescreva um fluxo negativo apenas para fazê-lo passar. Quando um processo automático de diagnóstico consumir artefatos, restrinja-o às falhas reais da suíte positiva, a menos que seu contrato ofereça suporte explícito à análise de caminhos negativos. Armazene os artefatos em uma hierarquia previsível que inclua aplicação, plataforma, suíte e identidade da execução. ## Reutilizar uma única aplicação fixture nos testes de ponta a ponta de todas as plataformas Use uma aplicação fixture padrão para exercitar toda a superfície de comandos nas plataformas suportadas. Reutilize os mesmos fluxos para dois fins: testes rápidos de regressão nas versões atuais das plataformas e validação de compatibilidade em uma nova versão do sistema operacional. Se um comportamento for específico de uma estrutura, adicione um workspace fixture dedicado em vez de distorcer a aplicação padrão. Dê a cada workspace seus próprios fluxos e artefato de build, e permita que a execução manual seja limitada a uma aplicação ou a um fluxo. Parametrize o driver de teste pela plataforma e por entradas de ambiente explícitas. Valide as entradas de execução antes de provisionar infraestrutura cara: rejeite antecipadamente versões de sistema não suportadas, workspaces ausentes e seletores de fluxo ambíguos. ## Corrigir falhas do dispositivo no driver, não com ajustes na CI Quando um fluxo de ponta a ponta falhar porque um driver de plataforma não consegue lidar com o comportamento real do dispositivo, corrija o driver, o adaptador do host ou a aplicação fixture que os usuários realmente executam. Não esconda a lacuna adicionando configurações de emulador, comandos de shell, ajustes de linha de comando ou pré-configuração ao workflow de CI. Alterações de workflow são adequadas para a própria estrutura do workflow: matrizes, retenção, gatilhos, entradas de execução validadas ou exceções de infraestrutura limitadas e documentadas. Elas não substituem o comportamento do produto. Use a mesma regra ao validar uma nova versão do sistema operacional. Um fluxo que só passa após uma preparação exclusiva de CI ainda indica um defeito de compatibilidade do produto, a menos que essa preparação seja um pré-requisito explícito para o usuário. ## Classificar os erros conforme valha a pena tentar de novo e sempre limpar os arquivos temporários Use execução assíncrona estruturada com dispatchers ou executores explícitos. Reserve pontes bloqueantes para os pontos de entrada da aplicação. Classifique as falhas expostas para que a orquestração diferencie condições que podem ser tentadas novamente de erros terminais, em vez de repetir tudo da mesma forma. Gerencie arquivos e diretórios temporários por meio de um gerenciador de recursos responsável pelo ciclo de vida. Crie-o próximo da operação que possui os recursos, faça as alocações por sua API e feche-o em um caminho `finally`, para que a limpeza recursiva ocorra após sucesso, falha ou cancelamento. Não contorne o gerenciador de recursos com chamadas diretas de criação de arquivos temporários. Arquivos não gerenciados se acumulam em workers de longa duração e dificultam a reprodução das falhas. Quando nenhum dispositivo for necessário, teste cancelamento, tempo limite, comportamento do supervisor e limpeza com orquestração real e drivers simulados determinísticos. ## Testar separadamente as ferramentas para agentes e o comportamento do modelo Quando a aplicação de linha de comando também expuser um servidor para agentes, mantenha duas famílias de testes distintas: - testes de funcionalidade das ferramentas que verifiquem solicitações, respostas, configuração dos dispositivos e comportamento diante de falhas; - avaliações de comportamento do modelo que meçam se um agente seleciona e usa corretamente as ferramentas. Use casos declarativos de avaliação e scripts de configuração específicos da plataforma para tornar a cobertura reproduzível. Execute testes rápidos de ferramentas em alterações comuns de implementação; execute avaliações de modelo mais lentas quando mudarem prompts, descrições das ferramentas, schemas, routing ou comportamento visível ao agente. Não trate uma pontuação do modelo como prova de que a ferramenta subjacente funciona, nem um teste funcional da ferramenta como prova de que um agente a usará corretamente. Os dois contratos precisam de evidências próprias. ## Regenerar os binários pela compilação, sem editá-los à mão Trate binários de drivers versionados, executores empacotados, somas de verificação e outros arquivos derivados como resultados de geradores. Nunca os edite manualmente. Execute a tarefa de build ou o finalizador responsável e registre os artefatos resultantes junto com a alteração de origem que os produziu. Antes de concluir: 1. Confirme que a alteração está no módulo responsável pelo comportamento. 2. Execute a camada de teste suficiente de menor custo e qualquer camada mais ampla diretamente afetada. 3. Interprete as suítes positivas e negativas de acordo com seus contratos. 4. Verifique se os recursos temporários são fechados após sucesso, falha e cancelamento. 5. Gere novamente os artefatos derivados pelo caminho oficial de build. 6. Confirme que as alterações de CI descrevem a estrutura da infraestrutura, em vez de ocultar defeitos do produto. Mantenha sincronizados a documentação dos workflows, a disposição das fixtures e as notas sobre propriedade dos módulos, para que colaboradores e agentes automatizados posteriores respeitem os mesmos limites.