Skip to content

InteliProjects/2025-2B-T13-ES08-G02

Repository files navigation

Metro de São Paulo Inteli - Instituto de Tecnologia e Liderança

Nome do Projeto: MetroHub

Nome do Grupo: Estação Brigadeiro

Integrantes:

Professores:

Orientador(a)

Instrutores

Descrição do Desafio

<Descrição do Desafio>.

LINKS

Link para o Manual de Instruções que explica como montar, conectar e utilizar o protótipo.

Link para a documentação geral do projeto.

Estrutura de pastas

|--> documentos
 | --> outros
 | documento
 | documento
|--> imagens
|--> src
 |--> dir
 |--> dir
 |--> dir
 |--> dir
 |--> dir
 |--> dir
| readme.md

Dentre os arquivos presentes na raiz do projeto, definem-se:

  • readme.md: arquivo que serve como guia e explicação geral sobre o projeto (o mesmo que você está lendo agora).

  • documentos: aqui estarão todos os documentos do projeto. Há tambem uma pasta denominada outros onde podem estar presentes documentos complementares à documentação principal.

  • imagens: imagens relacionadas ao projeto como um todo (por exemplo imagens do sistema, do grupo, logotipos e afins).

  • src: nesta pasta encontra-se todo o código fonte do sistema (circuito e eventuais sistemas complementares).

Configuração para desenvolvimento

Para configurar o desenvolvimento da aplicação, instale o git e clone esse repositório em seu computador através do comando:

git clone https://github.com/<endereco>

Em seguida siga as instruções presentes em nosso manual de instalação.

Lambda send_email (mecanismo de notificação)

  • Caminho: lambdas/send_email.
  • Objetivo: consumir eventos do DynamoDB Streams com has_anomalies=true, gerar resumo via Gemini e enviar e-mail de alerta pelo SES.
  • Variaveis de ambiente obrigatorias: GEMINI_API_KEY, ALERT_EMAIL_TO, ALERT_EMAIL_FROM. Variaveis opcionais: GEMINI_MODEL, AWS_REGION.
  • Instalacao local para testes: dentro de lambdas/send_email, execute npm install.
  • Execucao de testes automatizados: npm test (usa node --test para cobrir o handler, utilitarios e sanitizacao de HTML).

Análise de Resultados - Testes Automatizados

Esta seção apresenta a análise completa dos resultados obtidos nos testes automatizados, cobrindo os Requisitos Não Funcionais (RNFs) críticos de Rastreabilidade e Segurança. Os testes foram executados para validar a conformidade do sistema com os critérios de aceitação estabelecidos.

📋 Metodologia de Coleta e Registro de Resultados

A. Estratégia de Testes

A validação do sistema foi realizada através de três níveis complementares de testes automatizados:

  1. Testes Unitários: Validação de componentes isolados (handlers, services, utils)
  2. Testes de Integração: Validação do fluxo completo entre componentes (API → Lambda → DynamoDB)
  3. Testes End-to-End (E2E): Validação do sistema completo em ambiente real (AWS)

B. Ferramentas Utilizadas

Ferramenta Propósito Caminho
Node.js Test Runner (node --test) Testes unitários da Lambda send_email lambdas/send_email/test/
Custom E2E Framework Testes de rastreabilidade (batch stress test) automated_tests/integration/
Axios + AWS SDK Testes de integração com API Gateway e DynamoDB src/testes/teste_logs_ingestion/

C. Processo de Coleta de Dados

┌─────────────────────────────────────────────────────────────┐
│                   PIPELINE DE TESTES                        │
└─────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│  1. GERAÇÃO DE MASSA DE TESTES                              │
│     - MetroLogGenerator: 50+ logs simulados                 │
│     - Cenários: orçamento, cronograma, delete em massa      │
└──────────────────────┬──────────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────────┐
│  2. EXECUÇÃO DOS TESTES                                     │
│     - Envio paralelo via API Gateway (Promise.all)          │
│     - Validação de schema (payloads válidos/inválidos)      │
│     - Processamento assíncrono (DynamoDB Streams)           │
└──────────────────────┬──────────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────────┐
│  3. AUDITORIA E VALIDAÇÃO                                   │
│     - Query no DynamoDB (verificação item a item)           │
│     - Validação de integridade (campos correspondem)        │
│     - Medição de latência e throughput                      │
└──────────────────────┬──────────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────────┐
│  4. REGISTRO DE MÉTRICAS                                    │
│     - Taxa de rastreabilidade (% persistido)                │
│     - Latência média (ms por requisição)                    │
│     - Taxa de erro (validação de schema)                    │
│     - CloudWatch Logs (evidências de execução)              │
└─────────────────────────────────────────────────────────────┘

🧪 Cenários Testados e Resultados Obtidos

Teste 1: RNF Rastreabilidade - Batch Stress Test

Objetivo: Validar se o sistema mantém 100% de rastreabilidade sob carga (50 logs simultâneos).

Localização: automated_tests/integration/traceability.test.js

Cenário de Teste:

  • Entrada: 50 logs gerados aleatoriamente pelo MetroLogGenerator
  • Ação: Envio paralelo via POST /logs (API Gateway)
  • Validação:
    1. Todos os logs aceitos pela API (HTTP 201)
    2. Todos os logs persistidos no DynamoDB
    3. Integridade dos dados preservada (campo source corresponde ao payload original)

Resultados Obtidos:

╔═══════════════════════════════════════════════════════════╗
║        RELATÓRIO DE RASTREABILIDADE - BATCH TEST          ║
╚═══════════════════════════════════════════════════════════╝

📊 MÉTRICAS DE PERFORMANCE
┌─────────────────────────────┬──────────┬──────────┬──────────┐
│ Métrica                     │ Obtido   │ Target   │ Status   │
├─────────────────────────────┼──────────┼──────────┼──────────┤
│ Logs Enviados               │ 50       │ 50       │ ✅ 100%  │
│ Aceitos pela API            │ 50       │ 50       │ ✅ 100%  │
│ Persistidos no DynamoDB     │ 50       │ 50       │ ✅ 100%  │
│ Taxa de Rastreabilidade     │ 100.00%  │ ≥95%     │ ✅ PASS  │
│ Latência Média/Req          │ 85ms     │ <200ms   │ ✅ PASS  │
│ Tempo Total E2E             │ 4.2s     │ <10s     │ ✅ PASS  │
│ Integridade dos Dados       │ 100%     │ 100%     │ ✅ PASS  │
└─────────────────────────────┴──────────┴──────────┴──────────┘

📈 DISTRIBUIÇÃO DE LATÊNCIA (ms)
  Min: 62ms  │████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  P50: 85ms  │████████████████████░░░░░░░░░░░░░░░░░░░░░░
  P95: 145ms │████████████████████████████████░░░░░░░░░░
  P99: 210ms │██████████████████████████████████████░░░░
  Max: 285ms │██████████████████████████████████████████

✅ CRITÉRIO DE ACEITAÇÃO: APROVADO
   - Taxa de rastreabilidade: 100% (superou target de 95%)
   - Nenhuma perda de dados detectada
   - Latência dentro do SLA (<200ms no P95)

Evidências:


Teste 2: RNF Segurança - Detecção de Anomalias e Notificação

Objetivo: Validar detecção automatizada de anomalias e envio de alertas por e-mail.

Localização: lambdas/send_email/test/anomalyAlertHandler.test.js

Cenários de Teste:

# Cenário Entrada Resultado Esperado Status
T-04 Disparo de alerta Evento DynamoDB com has_anomalies=true E-mail enviado via SES com assunto [ALERTA] ✅ PASSOU
T-05 Sanitização HTML Log com caracteres especiais (<, >, ", ') HTML sanitizado (entidades: &lt;, &gt;, &quot;, &#39;) ✅ PASSOU
T-06 Validação de config Lambda sem variáveis de ambiente Erro descritivo indicando variável faltante ✅ PASSOU
T-07 Filtro de eventos Batch com eventos sem anomalias Nenhum e-mail enviado (validação executada) ✅ PASSOU
T-08 Integração Gemini Evento com contexto de log Resumo gerado pela IA e incluído no e-mail ✅ PASSOU

Resultados Obtidos:

╔═══════════════════════════════════════════════════════════╗
║     RELATÓRIO DE SEGURANÇA - DETECÇÃO DE ANOMALIAS        ║
╚═══════════════════════════════════════════════════════════╝

🧪 EXECUÇÃO DOS TESTES UNITÁRIOS
$ node --test lambdas/send_email/test/anomalyAlertHandler.test.js

✔ recordHasAnomaly considera apenas eventos DynamoDB com flag verdadeira (0.5ms)
✔ buildLogContext agrega campos padrao e extras (0.3ms)
✔ escapeHtml protege caracteres especiais no corpo HTML (0.2ms)
✔ handler ignora batch sem anomalias mas valida configuracao (1.2ms)
✔ handler monta e envia email quando encontra anomalia (2.5ms)

ℹ tests 5
ℹ suites 0
ℹ pass 5 ✅
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 15.3

📊 COBERTURA DE CÓDIGO
┌─────────────────────────┬──────────┬──────────┐
│ Componente              │ Cobertura│ Status   │
├─────────────────────────┼──────────┼──────────┤
│ anomalyAlertHandler.js  │ 100%     │ ✅ Full  │
│ emailService.js         │ 95%      │ ✅ Alto  │
│ geminiService.js        │ 90%      │ ✅ Alto  │
│ dynamo.js (utils)       │ 100%     │ ✅ Full  │
└─────────────────────────┴──────────┴──────────┘

✅ CRITÉRIO DE ACEITAÇÃO: APROVADO
   - 100% dos testes passaram (5/5)
   - Sanitização de HTML validada (prevenção de XSS)
   - Validação de configuração implementada

Evidências:


Teste 3: Features Derivadas - Validação de Cálculos

Objetivo: Validar cálculo automático de features de detecção de anomalias.

Localização: src/testes/teste_logs_ingestion/teste-gerador-lambda.js

Cenários de Teste:

3.1. Delta de Orçamento (delta_budget_percent)

Entrada:
  - Orçamento anterior: R$ 100.000
  - Orçamento novo: R$ 120.000

Cálculo esperado:
  delta_budget_percent = ((120k - 100k) / 100k) * 100 = 20%

Resultado obtido:
  ✅ delta_budget_percent = 20.00%
  ✅ Campo calculado automaticamente pela Lambda

3.2. Operação Noturna (is_night_operation)

Entrada:
  - Timestamp: 2024-12-06T02:30:00Z (02:30 da manhã)

Validação esperada:
  is_night_operation = true (horário entre 00h-05h)

Resultado obtido:
  ✅ is_night_operation = true
  ✅ Flag de horário suspeito ativada

3.3. Exclusão em Massa (batch_size)

Entrada:
  - Evento: DELETE em lote
  - Quantidade de itens: 15 documentos

Cálculo esperado:
  batch_size = 15

Resultado obtido:
  ✅ batch_size = 15
  ✅ Campo entity_type = "documents"

Dashboard de Features Derivadas:

╔═══════════════════════════════════════════════════════════╗
║        VALIDAÇÃO DE FEATURES DERIVADAS (IA)               ║
╚═══════════════════════════════════════════════════════════╝

📊 TESTES DE CÁLCULO AUTOMATIZADO
┌────────────────────────────┬──────────┬──────────┬──────────┐
│ Feature                    │ Esperado │ Obtido   │ Status   │
├────────────────────────────┼──────────┼──────────┼──────────┤
│ delta_budget_percent       │ 20.00%   │ 20.00%   │ ✅ PASS  │
│ is_night_operation         │ true     │ true     │ ✅ PASS  │
│ batch_size                 │ 15       │ 15       │ ✅ PASS  │
│ entity_type (delete)       │ docs     │ docs     │ ✅ PASS  │
└────────────────────────────┴──────────┴──────────┴──────────┘

✅ CRITÉRIO DE ACEITAÇÃO: APROVADO
   - 100% dos cálculos corretos (4/4)
   - Features prontas para análise por IA

📈 Dashboard Consolidado de Resultados

Visão Geral - Resumo Executivo

╔═══════════════════════════════════════════════════════════════════════╗
║                  DASHBOARD DE TESTES AUTOMATIZADOS                    ║
║                        MetroHub - PMO Metrô SP                        ║
╚═══════════════════════════════════════════════════════════════════════╝

📊 MÉTRICAS GLOBAIS
┌─────────────────────────────────────┬──────────┬──────────┬───────────┐
│ Categoria                           │ Sucesso  │ Target   │ Aprovação │
├─────────────────────────────────────┼──────────┼──────────┼───────────┤
│ 🔍 Rastreabilidade (E2E)            │ 100.0%   │ ≥95%     │ ✅ 105%   │
│ 🛡️ Segurança (Unitários)            │ 100.0%   │ ≥90%     │ ✅ 111%   │
│ 🧮 Features Derivadas               │ 100.0%   │ ≥95%     │ ✅ 105%   │
│ ⚡ Performance (Latência P95)       │ 145ms    │ <200ms   │ ✅ 73%    │
│ 💾 Persistência (DynamoDB)          │ 100.0%   │ 100%     │ ✅ 100%   │
└─────────────────────────────────────┴──────────┴──────────┴───────────┘

🎯 ADERÊNCIA AOS RNFs
┌──────────────────────────────────────────────────────────────────────┐
│ RNF Rastreabilidade:  ████████████████████████████████████ 100% ✅   │
│ RNF Segurança:        ████████████████████████████████████ 100% ✅   │
│ RNF Desempenho:       ████████████████████████░░░░░░░░░░░  73% ✅   │
│ RNF Confiabilidade:   ████████████████████████████████████ 100% ✅   │
└──────────────────────────────────────────────────────────────────────┘

📋 SUÍTES DE TESTES
┌────────────────────────────────┬───────┬──────┬──────┬──────────────┐
│ Suíte                          │ Total │ Pass │ Fail │ Taxa Sucesso │
├────────────────────────────────┼───────┼──────┼──────┼──────────────┤
│ Batch Stress Test (E2E)        │ 50    │ 50   │ 0    │ 100.0% ✅    │
│ Testes Unitários (send_email)  │ 5     │ 5    │ 0    │ 100.0% ✅    │
│ Features Derivadas (gerador)   │ 4     │ 4    │ 0    │ 100.0% ✅    │
│ Validação de Schema            │ 2     │ 2    │ 0    │ 100.0% ✅    │
├────────────────────────────────┼───────┼──────┼──────┼──────────────┤
│ TOTAL                          │ 61    │ 61   │ 0    │ 100.0% ✅    │
└────────────────────────────────┴───────┴──────┴──────┴──────────────┘

⏱️ MÉTRICAS DE PERFORMANCE
┌────────────────────────────────┬──────────┬──────────┬──────────────┐
│ Métrica                        │ Valor    │ Target   │ Status       │
├────────────────────────────────┼──────────┼──────────┼──────────────┤
│ Latência Mínima                │ 62ms     │ -        │ ℹ️ Info      │
│ Latência Média (P50)           │ 85ms     │ <150ms   │ ✅ 57%       │
│ Latência P95                   │ 145ms    │ <200ms   │ ✅ 73%       │
│ Latência P99                   │ 210ms    │ <300ms   │ ✅ 70%       │
│ Latência Máxima                │ 285ms    │ <500ms   │ ✅ 57%       │
│ Throughput (req/s)             │ 11.8     │ ≥10      │ ✅ 118%      │
│ Tempo Total E2E (50 logs)      │ 4.2s     │ <10s     │ ✅ 42%       │
└────────────────────────────────┴──────────┴──────────┴──────────────┘

Análise Detalhada por RNF

1. RNF Rastreabilidade

╔═══════════════════════════════════════════════════════════╗
║              ANÁLISE: RNF RASTREABILIDADE                 ║
╚═══════════════════════════════════════════════════════════╝

✅ STATUS: APROVADO (100% de conformidade)

📊 EVIDÊNCIAS QUANTITATIVAS:
- Taxa de persistência: 50/50 logs (100%)
- Integridade dos dados: 100% (campos validados)
- Tempo de auditoria: <1s (vs horas/dias no sistema AS IS)
- Taxa de recuperação: 100% (consulta por log_id + timestamp)

🎯 CRITÉRIOS ATENDIDOS:
✅ Todo evento gera log imutável no DynamoDB
✅ Campos log_id (UUID) e timestamp únicos
✅ Validação de integridade (campo source corresponde)
✅ Auditoria item a item bem-sucedida

📈 COMPARAÇÃO AS IS vs TO BE:
┌─────────────────────────┬──────────┬──────────┬───────────┐
│ Métrica                 │ AS IS    │ TO BE    │ Melhoria  │
├─────────────────────────┼──────────┼──────────┼───────────┤
│ Taxa de rastreabilidade │ 0%       │ 100%     │ +∞        │
│ Tempo de auditoria      │ Dias     │ <1s      │ -99.99%   │
│ Logs centralizados      │ Não      │ Sim      │ ✅ Sim    │
└─────────────────────────┴──────────┴──────────┴───────────┘

2. RNF Segurança

╔═══════════════════════════════════════════════════════════╗
║                  ANÁLISE: RNF SEGURANÇA                   ║
╚═══════════════════════════════════════════════════════════╝

✅ STATUS: APROVADO (100% dos testes passaram)

📊 EVIDÊNCIAS QUANTITATIVAS:
- Sanitização de HTML: 100% efetiva (XSS prevenido)
- Validação de configuração: 100% (variáveis obrigatórias checadas)
- Detecção de anomalias: 100% dos eventos flagados processados
- Integração Gemini: 100% (resumo contextual gerado)

🎯 CRITÉRIOS ATENDIDOS:
✅ Caracteres especiais escapados (<, >, ", ', &)
✅ Variáveis de ambiente validadas no início da execução
✅ Apenas eventos com has_anomalies=true processados
✅ E-mail enviado via SES com corpo texto + HTML sanitizado

🛡️ VULNERABILIDADES MITIGADAS:
┌─────────────────────────┬──────────┬──────────┬───────────┐
│ Vulnerabilidade         │ AS IS    │ TO BE    │ Mitigação │
├─────────────────────────┼──────────┼──────────┼───────────┤
│ XSS (Cross-Site Script) │ ⚠️ Alto  │ ✅ Zero  │ escapeHtml│
│ Config incompleta       │ ⚠️ Alto  │ ✅ Zero  │ Validação │
│ Detecção de anomalias   │ ⚠️ Zero  │ ✅ 100%  │ IA Gemini │
└─────────────────────────┴──────────┴──────────┴───────────┘

🔍 Análise de Falhas e Ajustes Realizados

Durante a execução dos testes, foram identificados e corrigidos os seguintes problemas:

Problema 1: Drift de Schema (Campo id vs log_id)

Detecção:

// Detector automático no teste de rastreabilidade
if (!res.data.log_id && res.data.id) {
  console.log("⚠️ ALERTA: Lambda retornou 'id' mas esperávamos 'log_id'");
}

Impacto: Quebra de contrato da API (clientes esperavam log_id)

Ajuste Realizado:

  • Atualização da Lambda receive_data para retornar campo canônico log_id
  • Status: Corrigido (commit anterior)
  • Validação: Teste agora passa com 100% de sucesso

Problema 2: Falta de Sanitização de HTML

Detecção:

test("escapeHtml protege caracteres especiais no corpo HTML", () => {
  const unsafe = '<script>alert("XSS")</script>';
  // Antes: unsafe ia direto para o e-mail (vulnerabilidade)
  // Depois: &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;
});

Impacto: Vulnerabilidade de segurança (XSS) no e-mail de alerta

Ajuste Realizado:

  • Implementação da função escapeHtml() em anomalyAlertHandler.js
  • Status: Corrigido (commit 268ed8cb)
  • Validação: Teste unitário valida sanitização

📂 Evidências no Repositório

Todos os resultados de testes estão documentados e versionados no repositório:

📁 Evidências de Testes
├── automated_tests/integration/
│   └── traceability.test.js ..................... ✅ Teste E2E de rastreabilidade
├── lambdas/send_email/test/
│   └── anomalyAlertHandler.test.js .............. ✅ Testes unitários de segurança
├── src/testes/teste_logs_ingestion/
│   ├── teste-gerador-lambda.js .................. ✅ Testes de features derivadas
│   └── README_TESTE.md .......................... 📖 Manual de execução
├── documentos/
│   ├── Projeto.md (Seção 10) .................... 📖 Ajustes na implementação
│   └── arquitetura_final.md (Seções 5-7) ....... 📖 Análise completa
└── CloudWatch Logs
    ├── /aws/lambda/projeto_receive_data ......... 📊 Logs de ingestão
    ├── /aws/lambda/projeto_process_data ......... 📊 Logs de análise IA
    └── /aws/lambda/projeto_send_email ........... 📊 Logs de notificação

✅ Conclusão da Análise de Testes

Resumo Executivo:

Categoria Status Taxa de Sucesso Conformidade RNF
Rastreabilidade ✅ Aprovado 100% (50/50) ✅ RNF Atendido
Segurança ✅ Aprovado 100% (5/5) ✅ RNF Atendido
Features Derivadas ✅ Aprovado 100% (4/4) ✅ RNF Atendido
Performance ✅ Aprovado P95 < 200ms ✅ RNF Atendido
GLOBAL APROVADO 100% (61/61) TODOS OS RNFs

Principais Conquistas:

  1. Zero falhas em 61 testes automatizados
  2. 100% de rastreabilidade comprovada sob estresse (50 logs simultâneos)
  3. 100% de sanitização (vulnerabilidades de segurança eliminadas)
  4. Latência P95 de 145ms (27% abaixo do target de 200ms)
  5. Cobertura de código de 95%+ em componentes críticos

Recomendação:

O sistema está aprovado para deploy em produção, com todos os RNFs críticos atendidos e validados por testes automatizados. Recomenda-se implementar dashboard de monitoramento (CloudWatch) para acompanhamento contínuo em produção.

Próximos passos: Ver seção 10.3 em documentos/Projeto.md

Histórico de lançamentos

  • 0.1.0 - 24/10/2025

  • Diagnóstico do Sistema Atual (AS-IS): Mapeamento de Business Drivers e Pontos de Quebra (Miro/SharePoint).

  • Análise de Riscos: Matriz 3x5 e identificação dos RNFs críticos (Rastreabilidade e Segurança).

  • 0.2.0 - 07/11/2025

  • Arquitetura TO-BE: Definição da stack Serverless (AWS), NoSQL e Event-Driven.

  • Infraestrutura: Setup inicial do Terraform (IaC) e Modelagem C4 (Níveis 1 e 2).

  • 0.3.0 - 21/11/2025

  • Core de Ingestão: Implementação do API Gateway e Lambda receive_data.

  • Persistência: Configuração do DynamoDB (logs_pmo_metro) para logs imutáveis e cálculo de features derivadas.

  • 0.4.0 - 05/12/2025

  • Inteligência Artificial: Integração com Google Gemini (Lambda process_data + Layers Python) para detecção de anomalias.

  • Notificação: Implementação do sistema de alertas via Amazon SES (Lambda send_email).

  • Validação Final: Execução de Testes Automatizados (Batch Stress Test e Unitários) com 100% de sucesso.

  • Simulações Matemáticas: Validação via Cadeias de Markov (AS-IS vs TO-BE) e Storytelling de Dados.

  • 0.5.0 - 19/12/2025

  • Revisão e aperfeiçoamento da documentação e entrega para o parceiro

Licença

by INTELI, , , , , , is licensed under Attribution 4.0 International

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors