Pular para conteúdo

Aula 20 - Projeto Capstone: Suíte Autônoma de Qualidade de Software 🚀

Objetivo Pedagógico

Objetivo: Conceber uma arquitetura holística de qualidade de software: pirâmide de testes completa, orquestração de testes unitários, de mutação (Stryker), contratos e performance em pipeline integrado com relatórios de cobertura consolidados.


📑 1. Fundamentos Teóricos & Análise Técnica

A maturidade de uma organização de engenharia é medida pela robustez de sua estratégia de qualidade automatizada.

O Projeto Capstone de Qualidade e Testes sintetiza os modelos teóricos e práticos da disciplina: 1. A Pirâmide de Testes Equilibrada: - Base Larga (Testes Unitários): Milhares de testes rápidos e determinísticos com cobertura de branches superior a 80%. - Camada Média (Testes de Integração e Contrato): Centenas de testes validando a comunicação de componentes, repositórios de dados e contratos de APIs. - Topo Estrito (Testes E2E e Visuais): Dezenas de cenários de fluxos críticos de negócio (User Journeys) com validação visual automatizada. 2. Além da Cobertura Tradicional: Testes de Mutação: - Uma cobertura de código de 100% não garante que os testes sejam eficazes se os asserts forem superficiais. - Os Testes de Mutação (Mutation Testing) introduzem falhas propositais no código-fonte (mutantes: alteração de operadores >, inversão de booleanos) para verificar se a suíte de testes existente detecta e elimina o mutante (Mutation Score). 3. Orquestração e Quality Gates Automatizados: - O pipeline consolida relatórios de cobertura, métricas de performance e relatórios de vulnerabilidade em um portal unificado, bloqueando releases que não atinjam os thresholds de qualidade corporativa.

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    Code["Push de Código no Repositório"] --> Gate1["Fase 1: Unit Tests & Análise de Mutação (Stryker)"]
    Gate1 --> Gate2["Fase 2: Testes de Contrato CDC (Pact Broker)"]
    Gate2 --> Gate3["Fase 3: Testes E2E e Regressão Visual (Playwright)"]
    Gate3 --> Gate4["Fase 4: Testes de Carga e SLA (k6)"]
    Gate4 --> Dashboard["Dashboard Unificado de Métricas de Qualidade"]
    Dashboard --> Status{"Mutation Score > 80% & p95 < 300ms?"}
    Status -- Sim --> Deploy["Deploy Seguro em Produção"]
    Status -- Não --> Block["Bloqueio Imediato de Release"]
    style Code fill:#e1f5fe,stroke:#01579b
    style Gate1 fill:#fff3e0,stroke:#e65100
    style Gate4 fill:#f3e5f5,stroke:#7b1fa2
    style Deploy fill:#e8f5e9,stroke:#2e7d32
    style Block fill:#ffebee,stroke:#c62828

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Mutation Score Indicator: Percentual de falhas sintéticas injetadas que foram capturadas por asserções de teste reais. - Execução em Matriz Paralela: Distribuição dos testes em múltiplos runners de CI para manter o tempo total de feedback abaixo de 10 minutos. - Relatórios Padronizados JUnit/Allure: Geração de artefatos padronizados para visualização executiva e histórica das suítes de teste. - Zero-Flakiness Policy: Isolamento automático de testes instáveis para quarentena sem comprometer a confiança da equipe nos pipelines.


🛠️ 2. Implementação Prática em Engenharia de Qualidade Contínua e Pirâmide de Testes

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// quality_pipeline_capstone.yml (Orquestração Completa dos Gates de Qualidade em CI)
name: Comprehensive Quality Pipeline

on: [push, pull_request]

jobs:
  unit-and-mutation:
    name: Unit & Mutation Testing Gate
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci
      - name: Rodar Testes Unitários com Cobertura
        run: npm run test:unit -- --coverage --coverageThreshold='{"global":{"lines":80}}'
      - name: Executar Teste de Mutação com Stryker
        run: npx stryker run --reporters clear-text,dashboard

  contract-tests:
    name: Contract Verification Gate
    needs: unit-and-mutation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - name: Verificar Contratos no Pact Broker
        run: npm run test:contract

  e2e-and-visual:
    name: Playwright E2E & Visual Gate
    needs: unit-and-mutation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci
      - name: Instalar Navegadores Playwright
        run: npx playwright install --with-deps
      - name: Executar Suíte E2E e Visual
        run: npx playwright test

  performance-k6:
    name: Performance SLA Gate
    needs: [contract-tests, e2e-and-visual]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: grafana/k6-action@v0.3.1
        with:
          filename: tests/perf/load_test_k6.js 

💡 Análise Passo a Passo do Código

  1. Dependência Hierárquica (needs): Economiza recursos de computação interrompendo o pipeline nas fases rápidas antes de disparar testes pesados.
  2. Avaliação de Cobertura Rígida: Falha imediatamente caso a cobertura de linhas de código caia abaixo do limiar de 80%.
  3. Integração do Stryker: Avalia matematicamente a força das asserções da suíte através de mutação de bytecode/AST.

🎯 3. Próximos Passos & Sequência Didática