Faculdade CDL · Qualidade de Software e Governança de TI

Testes
Automatizados

Conceitos Fundamentais, Metodologias, Ferramentas
e o Futuro com Inteligência Artificial

Erivania Ferreira Dias Felipe Silva Alvim Ismael Ribeiro Oliveira Rondinelle F. Diógenes Nery Sarah Ribeiro Marques
Fortaleza  ·  2026

[ ← → SETAS ou ESPAÇO para navegar ]

00
Agenda · Sumário

O que vamos abordar

01

Conceitos Fundamentais

Manual vs. Automático · TDD · BDD · Pirâmide de Testes

02

Vantagens Estratégicas

Regressão · Shift-Left · Living Docs · CI/CD

03

Ecossistema de Ferramentas

Cypress · Playwright · Selenium · Jest · Postman

04

Desvantagens e Obstáculos

Flaky Tests · Falsa Segurança · Overhead de Manutenção

05

Inteligência Artificial 🤖

LLMs · Self-Healing · Visual AI · Ferramentas em detalhe

+

Exemplos Práticos de Código

Unitário · Integração · API · Gherkin · IA gerando testes

01
Seção 01 de 05

ConceitosFundamentais

Da diferença entre manual e automatizado até a arquitetura que define onde cada tipo de teste deve viver no projeto.

Manual vs. Automatizado TDD BDD / Gherkin Pirâmide de Testes Exemplos de Código
01
Conceitos Fundamentais

Manual vs. Automatizado

⚠ Testes Manuais

  • Exige interação humana física com cada tela do software
  • Alto risco de fadiga e erros de atenção
  • Extremamente lentos — impossíveis de escalar
  • Atrasam lançamentos e encarecem o ciclo de validação
  • Inviáveis para projetos com entregas frequentes (Agile)

✓ Testes Automatizados

  • Scripts e ferramentas executam validações programáticas
  • Centenas de casos rodados em segundos ou minutos
  • Garante que funcionalidades pré-existentes não quebrem
  • Resultado determinístico: mesmo código → mesmo resultado
  • Motor essencial para pipelines de CI/CD modernos
01
Abordagens · TDD

Test-Driven Development

O desenvolvedor escreve o teste antes do código de produção. O ciclo guia cada incremento do software de forma rigorosa e contínua.

// fase 01

🔴 Red

Escreve-se um teste para uma funcionalidade inexistente. Ele irá falhar — isso é intencional.

// fase 02

🟢 Green

Escreve-se o código mínimo possível apenas para fazer o teste passar.

// fase 03

♻ Refactor

O código é melhorado e otimizado com a segurança que o teste garante.

// reinício

🔁 Repetir

O ciclo recomeça para cada nova funcionalidade do sistema.

01
Abordagens · BDD

Behavior-Driven Development

Evolução do TDD que foca na regra de negócio. Aproxima a equipe técnica dos stakeholders por meio de uma linguagem que todos entendem.

01
Linguagem Onipresente

Formato Gherkin — qualquer membro da equipe entende os cenários, sem saber programar.

02
Cenários como Contratos

Cada cenário define explicitamente o comportamento esperado antes de qualquer código.

03
Ferramentas

Cucumber, Behat, SpecFlow — transformam linguagem natural em código executável.

Exemplo em Gherkin

Cenários em linguagem natural → código automatizado:

Feature: Geração de Relatório

Dado que o usuário está logado no painel
Quando ele clica em 'Gerar Relatório'
Então um arquivo PDF deve ser baixado
E o nome do arquivo contém a data atual
01
Arquitetura de Testes

A Pirâmide de Testes

Mike Cohn — orienta a proporção ideal de cada tipo de teste para que o projeto seja eficiente e financeiramente viável.

🟢
Base · Grande volume · Mais rápidos
Testes Unitários

Isolam a menor unidade — funções e métodos — sem depender de banco ou rede. Executados em milissegundos. Devem ser a maioria absoluta do projeto.

🟣
Meio · Quantidade moderada
Testes de Integração

Verificam se as partes conversam corretamente entre si: API↔Banco, Frontend↔Backend, serviços de rede e persistência de dados.

🔴
Topo · Poucos · Mais custosos
Testes E2E (Ponta a Ponta)

Simulam o usuário real na UI — navegam, clicam, preenchem. Lentos, custosos e frágeis. Usar apenas nos fluxos críticos: login, checkout, formulários principais.

01
Exemplo Prático · Unitário

Base da Pirâmide: Teste Unitário

Verificação matemática da lógica pura do back-end — isolada, sem depender de banco ou rede.

Código de Produção · JavaScript
// Regra de negócio: cálculo de contrato

function calcularContrato(valor, desconto) {
  if (desconto < 0 || desconto > 100)
    throw new Error('Desconto inválido');
  return valor - (valor * (desconto / 100));
}
Teste Automatizado · Jest
// Asserções verificam o comportamento

describe('calcularContrato', () => {

  test('aplica 10% corretamente', () => {
    const r = calcularContrato(1000, 10);
    expect(r).toBe(900); // ✅ PASS
  });

  test('rejeita desconto negativo', () => {
    expect(() => calcularContrato(500, -5))
      .toThrow(); // ✅ PASS
  });
});
01
Exemplo Prático · Integração

Meio da Pirâmide: Teste de Integração

Verifica se as partes do sistema conversam corretamente entre si — API back-end recebendo requisição e persistindo dados num banco real.

Cenário: API Java + MySQL
// JUnit 5 + Spring Boot Test

@SpringBootTest
@AutoConfigureMockMvc
class UsuarioControllerTest {

  @Autowired MockMvc mvc;
  @Autowired UsuarioRepository repo;

  @Test
  void deveCriarUsuarioNoBanco() throws Exception {
    String json = "{\"nome\":\"Ana\",\"email\":\"ana@x.com\"}";

    mvc.perform(post("/usuarios")
      .contentType(APPLICATION_JSON)
      .content(json))
      .andExpect(status().isCreated()); // ✅ 201

    assertTrue(repo.existsByEmail("ana@x.com")); // ✅ DB
  }
}

O que esse teste valida?

  • A rota HTTP recebe o JSON corretamente
  • O Controller chama o Service sem erros
  • O Repository persiste o registro no banco real
  • O código de status retornado é 201 Created
  • O registro realmente existe no MySQL após a chamada

⚠ Diferença do Unitário

O teste unitário usa Mocks — simula o banco. O teste de integração usa o banco de dados real, garantindo que a camada de persistência funciona de verdade.

02
Seção 02 de 05

VantagensEstratégicas

Por que o ROI da automação justifica o investimento inicial — e como cada benefício impacta a arquitetura, a cultura da equipe e o produto.

Prevenção de Regressão Shift-Left Testing Living Documentation CI/CD Pipeline
02
Vantagens Estratégicas · ROI

Benefícios a Longo Prazo

🛡 Prevenção de Regressão

Uma alteração inofensiva pode quebrar funcionalidades inteiras. A suíte de testes atua como rede de segurança ininterrupta — roda centenas de casos em minutos após cada commit.

⬅ Shift-Left Testing

Mover testes para o início do ciclo reduz custos exponencialmente. Um bug na fase de codificação custa centavos; em produção, causa danos incalculáveis à reputação.

📖 Documentação Viva

Testes bem escritos funcionam como documentação que nunca fica obsoleta. O novo dev no onboarding entende as regras de negócio lendo a suíte de testes.

🚀 Viabiliza CI/CD

Sem automação, a esteira de entrega contínua é inútil. Os testes são os gatekeepers que aprovam ou bloqueiam cada deploy de forma automática e segura.

02
Integração Contínua · CI/CD

O Pipeline Automatizado

GitHub Actions, GitLab CI e Jenkins executam toda a suíte a cada commit. Os testes são os verdadeiros fiscais (gatekeepers) da esteira.

💻Commit
Dev push
⚙️Build
Compilação
🧪FALHA
Teste quebrado → BLOQUEIO
PASS
Todos os testes OK
🚀PROD
Deploy automático

Se um único teste falhar, o pipeline trava — o bug nunca chega ao servidor de produção.

03
Seção 03 de 05

Ecossistema deFerramentas

As soluções consolidadas no mercado para cada camada da Pirâmide — não existe ferramenta definitiva, mas sim a escolha certa para cada contexto.

Cypress · Playwright · Selenium Jest · JUnit · PHPUnit Postman · Insomnia · Newman
03
Ecossistema · E2E

Testes de Interface Gráfica

Cypress Test Runner

🌲 Cypress

Roda dentro do loop de eventos da aplicação. Extremamente rápido, Time Travel visual para debug. Padrão no ecossistema React/Vue/Angular.

JS / TypeScript
playwright test --ui
chromium › login.spec.ts (1.2s)
firefox › login.spec.ts (1.8s)
webkit › login.spec.ts (1.5s)
chromium › checkout.spec (2.1s)
Running 3 browsers in parallel...

🎭 Playwright

Criado pela Microsoft. Suporte nativo a Chromium, Firefox e WebKit em paralelo. Referência para múltiplas abas e iframes.

Multi-browser
🧪
WebDriver Protocol
Since 2004 — Industry Standard

🏛 Selenium WebDriver

O padrão histórico da indústria. Altíssima flexibilidade: Java, Python, C#, Ruby, PHP. Essencial para sistemas legados e ambientes corporativos.

Multi-linguagem
03
Ecossistema · Unitários e APIs

Frameworks e Ferramentas Especializadas

⚡ Frameworks Unitários

JS
Jest

Criado pelo Facebook. Zero-configuration. Padrão no Node.js e React com mocking nativo.

JV
JUnit 5 (Java)

Padrão ouro no desenvolvimento corporativo com Spring Boot. Família xUnit.

PH
PHPUnit

Referência para back-end em PHP com Laravel e Symfony. Mesma filosofia xUnit.

🔗 Ferramentas de API

Postman & Insomnia

Evoluíram de clientes HTTP simples para plataformas robustas de automação.

  • Validam status HTTP (200, 201, 404, 500…)
  • Verificam estrutura e esquema do JSON retornado
  • Integram ao CI/CD via Newman (linha de comando)
  • Testam performance e tempo de resposta da API
04
Seção 04 de 05

Desvantagens eObstáculos

Os desafios reais que equipes enfrentam na transição para automação — e que a Inteligência Artificial (seção 05) vem resolver.

Gestão de Ambiente e Dados Flaky Tests Falsa Sensação de Segurança Overhead de Manutenção
04
Dificuldades de Implementação

Barreiras Técnicas e Processuais

⚠ Gestão de Ambiente e Dados

Testes não podem depender de fatores externos incontroláveis.

  • Problema do estado: Teste A exclui um registro; Teste B falha por depender dele
  • Mocks e Stubs: Criar "dublês de código" exige alto conhecimento em arquitetura
  • Manter dezenas de simulações consome tempo considerável da equipe

💥 Flaky Tests — Inimigo Número 1

Testes que passam e falham aleatoriamente sem nenhuma mudança no código.

  • Causados por renderização assíncrona — clicar antes do elemento existir no DOM
  • Latência momentânea de rede ou lentidão no servidor de CI
  • Destroem a confiança da equipe no pipeline inteiro
  • Desenvolvedores passam a ignorar alertas — derrotando a automação

🎭 Falsa Sensação de Segurança

100% de Code Coverage não significa lógica de negócios imune. Equipes testam só o "Happy Path", esquecendo os Edge Cases que chegam em produção.

💸 Overhead de Manutenção

Alto custo inicial difícil de justificar a curto prazo. Fragilidade de UI: redesigns quebram seletores CSS, gerando mais tempo consertando testes do que criando features.

05
Seção 05 de 05 · Destaque

InteligênciaArtificial

Como a IA está resolvendo na prática os maiores problemas da automação — com ferramentas reais, exemplos de código e screenshots.

LLMs · Copilot · Gemini Self-Healing · Testim · Mabl Visual AI · Applitools Eyes Exemplos Práticos
05
Inteligência Artificial · Visão Geral

IA na Automação de Testes

Solução prática para os maiores problemas — alta manutenção e Flaky Tests. Três pilares que transformam o ecossistema de QA:

🤖

01 · Geração (LLMs)

GitHub Copilot, Gemini e ChatGPT analisam funções e geram estrutura de testes automaticamente — inclusive Edge Cases que humanos esqueceriam.

Integrado à IDE
🔧

02 · Auto-Cura (Self-Healing)

Testim e Mabl usam ML para mapear dezenas de atributos de cada elemento. Se o seletor muda, a IA localiza o elemento e atualiza o script automaticamente.

Elimina Flaky Tests
👁

03 · Visual AI

Applitools Eyes usa Visão Computacional para comparar screenshots inteligentemente — detecta erros de CSS que testes HTML jamais enxergariam.

Vê como humano
05
IA · Pilar 01 · Geração de Código

GitHub Copilot Gerando Testes

O desenvolvedor escreve a função e pede à IA para gerar os testes. A IA analisa a lógica e sugere casos que um humano normalmente esqueceria.

Prompt enviado à IA
// Desenvolvedor escreve no editor:

function validarCPF(cpf: string): boolean {
  // remove pontos e traços
  const limpo = cpf.replace(/\D/g, '');
  if (limpo.length !== 11) return false;
  // ... lógica de validação dos dígitos ...
}

// 💬 Copilot: "Generate tests for validarCPF"
IA gera automaticamente ↓
describe('validarCPF', () => {
  it('aceita CPF válido formatado', () =>
    expect(validarCPF('111.444.777-35')).toBe(true));
  it('rejeita string vazia', () => /* Edge Case */
    expect(validarCPF('')).toBe(false));
  it('rejeita CPF com todos dígitos iguais', () => /* Edge Case */
    expect(validarCPF('111.111.111-11')).toBe(false));
  it('rejeita CPF com letras', () => /* Edge Case */
    expect(validarCPF('abc.def.ghi-jk')).toBe(false));
});

🎯 Ferramentas que fazem isso

GH
GitHub Copilot

Integrado ao VS Code. Sugere testes em tempo real enquanto você digita.

GM
Google Gemini

Integrado ao Android Studio e IDEs Google. Forte em análise de código complexo.

CT
ChatGPT / Claude

Via chat ou API — analisa funções complexas e sugere suítes de teste completas.

✨ O grande diferencial

A IA mapeia Edge Cases que o humano não pensaria: string vazia, nulo, todos os dígitos iguais, formato de outro país — aumentando a cobertura real sem esforço braçal.

05
IA · Pilar 02 · Self-Healing

Auto-Cura: Resiliência E2E

O maior calcanhar de aquiles dos testes E2E é a dependência de seletores frágeis. Ferramentas com Self-Healing resolvem isso com Machine Learning.

1
Aprendizado Inicial

Ao interagir com um botão, salva: texto, cor, tamanho, posição no DOM e elementos vizinhos — dezenas de atributos.

2
Detecção de Mudança

ID muda de btn-salvarbtn-enviar-form. Teste tradicional: quebra imediatamente. Testim/Mabl: detecta a mudança.

3
Auto-Reparo em Background

A IA vê que 95% dos outros atributos batem, clica no elemento correto e atualiza o script automaticamente. Zero intervenção humana.

🔧 Testim & Mabl em Ação

mabl · self-healing log
Selector changed: #btn-salvar
Analyzing element fingerprint...
Text match: "Salvar" ✓ (100%)
Position match ✓ (98%)
Neighbors match ✓ (96%)
Self-healed → #btn-enviar-form
Test script updated automatically.
95%
menos manutenção manual em testes E2E
~0
falsos positivos por mudança de seletor
05
IA · Pilar 03 · Visual Regression Testing

Applitools Eyes: Enxerga como Humano

Testes E2E tradicionais validam código HTML, mas não enxergam a tela visualmente. Um botão pode existir no DOM mas estar invisível por um erro de CSS.

// Teste E2E tradicional — PASSA mesmo com bug visual
expect(page.locator('#btn-comprar')).toBeVisible();
// ✅ "existe no DOM" — mas a cor é #fff no fundo #fff !
// Applitools Eyes — DETECTA o problema visual
await eyes.checkWindow('Página de Checkout');
// 🚨 Diff detectado: botão invisível (cor=bg)
// 🚨 Banner sobrepondo formulário no mobile

Como funciona na prática

Tira um screenshot do estado atual, compara com a baseline aprovada usando Visão Computacional — e ignora conteúdo dinâmico (anúncios, dados de usuário) para evitar falsos alertas.

👁 Visual AI Dashboard

applitools · test results
Header · Desktop 1920px — MATCH
Header · Mobile 375px — MATCH
Checkout · Desktop — DIFF
   btn-comprar: color contrast fail
   Overlap: promo-banner / form
Footer · Desktop 1920px — MATCH
Dynamic content ignored: 3 regions

Vantagens sobre pixel-diff tradicional

  • Não quebra por 1 pixel de serrilhado de fonte
  • Ignora conteúdos dinâmicos automaticamente
  • Testa mobile, tablet e desktop num único script
  • Integra ao pipeline CI/CD como qualquer teste
05
IA · Resumo Comparativo

Qual ferramenta de IA usar para cada dor?

Problema / Dor Ferramenta de IA Pilar Como resolve
Escrever testes unitários é lento GitHub Copilot / Gemini 01 · Geração Analisa o código e gera a suíte automaticamente
Edge Cases esquecidos pelo dev ChatGPT / Claude / Copilot 01 · Geração Mapeia cenários extremos: nulo, vazio, formato errado
Testes E2E quebram com redesigns Testim / Mabl 02 · Self-Healing Atualiza seletores automaticamente via ML
Flaky Tests por mudanças na UI Mabl / Testim 02 · Self-Healing Fingerprint multi-atributo elimina quebras falsas
Bug visual (botão invisível, sobreposição) Applitools Eyes 03 · Visual AI Visão computacional detecta o que HTML não vê
Responsividade em múltiplos devices Applitools Eyes 03 · Visual AI Testa mobile/tablet/desktop em paralelo

Muito Obrigado!

Dúvidas ou Perguntas?

Apresentação desenvolvida para a disciplina de

Qualidade de Software e Governança de TI

Faculdade CDL · Fortaleza · 2026

Testes Automatizados — Faculdade CDL 01 / 24