Pular para conteúdo

Especificação de Requisitos Não-Funcionais

1. Introdução

O sistema do projeto Micromouse estrutura-se em dois blocos integrados: o firmware embarcado no Micromouse, responsável pelo controle autônomo do robô, e a aplicação web, encarregada de exibir a telemetria em tempo real e de armazenar os dados de cada corrida em banco de dados. Os requisitos não-funcionais consolidados neste documento estabelecem os atributos de qualidade necessários para que ambos os blocos operem com confiabilidade, desempenho e integridade compatíveis com o contexto acadêmico de uso.

2. Desempenho: Métricas de Tempo

RNF-01 — Latência de Transmissão de Telemetria

Atributo Valor
Descrição O Micromouse deve transmitir dados de telemetria ao sistema web com latência máxima aceitável
Métrica Tempo entre geração do dado no robô e exibição na interface web
Limite máximo ≤ 500 ms (em condições normais de operação na rede local)
Condição de medição Rede Wi-Fi local, distância de até 10 metros entre robô e roteador
Justificativa Telemetria em tempo real, conforme percebida pelo usuário, exige atualização sub-segundo
MoSCoW Must Have. Sem latência sub-segundo, a interface deixa de atender ao requisito de tempo real previsto no enunciado

RNF-02 — Taxa de Atualização da Interface Web

Atributo Valor
Descrição A interface web deve atualizar os dados exibidos (velocidade, trajeto, bateria) com frequência mínima
Métrica Intervalo entre atualizações consecutivas dos dados na tela
Limite máximo ≤ 1 segundo por ciclo de atualização
Condição de medição Navegador moderno (Chrome/Firefox), conexão local ativa
Justificativa Assegura que o observador acompanhe o progresso do Micromouse em tempo real
MoSCoW Must Have. Complementa o RNF-01; em conjunto, ambos definem a percepção de tempo real exigida pelo enunciado

A interface deve atualizar-se a cada 1 segundo. Para viabilizar essa cadência, a transmissão dos dados do robô ao servidor precisa ser concluída em tempo inferior a esse intervalo, deixando margem para o processamento no servidor e a renderização no navegador. Adotando uma divisão conservadora (metade do tempo para transmissão e metade para processamento e renderização), chega-se a 500 ms como limite para a etapa de transmissão. Em redes locais Wi-Fi típicas, as latências costumam situar-se entre 10 e 50 ms, de modo que o limite estabelecido é amplamente seguro e alcançável.

RNF-03 — Tempo de Carregamento da Página Web

Atributo Valor
Descrição A aplicação web deve carregar completamente dentro de um tempo aceitável
Métrica Tempo desde a requisição HTTP até o estado "interativo" da página (TTI)
Limite máximo ≤ 3 segundos (em rede local)
Condição de medição Conexão local, hardware padrão de laboratório
Justificativa Evita espera excessiva antes do início da corrida
MoSCoW Should Have. Trata-se de ajuste de qualidade de uso; um carregamento de 4 a 5 segundos não inviabiliza a corrida, ainda que degrade a experiência durante apresentações

Este requisito se aplica ao carregamento inicial da aplicação, não à telemetria em si. O limite de 3 segundos é amplamente adotado como referência na indústria, sendo definido pelas Core Web Vitals do Google como o intervalo aceitável para o estado interativo.

RNF-04 — Tempo de Ciclo de Controle do Firmware

Atributo Valor
Descrição Tempo máximo de execução do loop principal de controle no microcontrolador
Limite máximo ≤ 10 ms por ciclo (equivalente a ≥ 100 Hz)
Condição de medição Execução no microcontrolador alvo, labirinto 16×16 em operação
MoSCoW Must Have. Decorre da física do robô (velocidade × tamanho da célula); abaixo de 100 Hz, a navegação torna-se instável e a probabilidade de colisão aumenta

O valor decorre das características físicas da competição. O robô precisa detectar paredes, corrigir sua trajetória e tomar decisões de navegação enquanto se desloca. As células têm 18 cm de lado e robôs em competições Micromouse tipicamente atingem velocidades entre 0,5 e 2 m/s, o que resulta em um tempo aproximado de 45 a 180 ms para atravessar metade de uma célula. Para garantir pelo menos quatro a cinco ciclos de controle nesse intervalo, assegurando estabilidade, a frequência mínima deve aproximar-se de 100 Hz, ou 10 ms por ciclo. Este requisito deve ser revisado após a definição do microcontrolador.

RNF-05 — Tempo de Armazenamento no Banco de Dados

Atributo Valor
Descrição Tempo máximo entre a detecção do objetivo pelo Micromouse e a confirmação de escrita dos dados finais no banco
Limite máximo ≤ 2 segundos
Condição de medição Banco de dados local ou servidor na mesma rede
MoSCoW Should Have. Uma escrita ligeiramente mais lenta não compromete a avaliação, mas a janela curta previne a perda de dados caso o operador desligue o sistema logo após a corrida

Ao término de uma corrida, o sistema deve garantir que todos os dados sejam armazenados antes que o operador desligue o robô ou encerre a aplicação. Dois segundos constituem tempo suficiente para a interface detectar o evento de conclusão, montar o objeto de dados e executar a operação de escrita no banco local.

3. Capacidade e Carga

RNF-06 — Tamanho do Resumo Final por Corrida

Atributo Valor
Descrição Tamanho máximo dos dados consolidados de uma corrida persistidos no banco
Limite máximo ≤ 10 KB por corrida
Conteúdo do resumo Tempo total, trajeto percorrido (matriz de paredes e sequência de células), velocidade média, consumo de bateria e status do desafio
MoSCoW Should Have. Trata-se de limite de dimensionamento que orienta o desenho do schema; ultrapassá-lo não interrompe o sistema, mas evidencia a necessidade de revisão do formato

Conforme o Diagrama de Atividades (raia do Backend) e a história US13, o backend grava no banco apenas o resumo final da corrida, ao receber a flag de conclusão emitida pelo firmware (comportamento verificado por CT-20 e CT-21). O stream contínuo de telemetria não é persistido: trafega entre firmware, backend e frontend apenas para alimentar a interface em tempo real.

O dimensionamento do resumo considera o pior caso (labirinto 16×16): a matriz de paredes ocupa cerca de 128 bytes (1 bit por parede em 256 células), e a sequência de células percorridas, mesmo com revisitas durante a fase de exploração, fica abaixo de 4 KB quando serializada em formato compacto. Os demais campos (escalares e enum de status) somam menos de 100 bytes. O limite de 10 KB cobre esse cenário com folga, considerando o overhead de serialização em JSON.

RNF-07 — Total de Corridas Armazenadas

Atributo Valor
Descrição Quantidade mínima de corridas que o banco de dados deve suportar sem degradação de desempenho nas consultas
Limite mínimo ≥ 100 corridas
Tempo de consulta Resultado de consulta por labirinto específico em ≤ 1 segundo
MoSCoW Should Have. O limite cobre o uso estimado do semestre com folga; valores inferiores ainda suportam a apresentação final, mas inviabilizam análise histórica

Estimando aproximadamente 10 sessões de teste distribuídas ao longo do semestre, com 3 labirintos por sessão e até 3 tentativas cada, chega-se a cerca de 90 corridas no total. O limite de 100 corridas cobre esse uso com pequena margem de segurança. Combinado ao limite do RNF-06 (≤ 10 KB por corrida), o banco precisaria suportar aproximadamente 1 MB de dados, volume sem qualquer impacto para PostgreSQL, SQLite, MySQL ou outros bancos relacionais.

RNF-08 — Usuários Simultâneos no Sistema Web

Atributo Valor
Descrição Número mínimo de usuários que podem acessar a interface web simultaneamente sem degradação
Limite mínimo ≥ 10 usuários simultâneos
Critério de degradação Latência de atualização mantida em ≤ 1 segundo com 10 clientes ativos
MoSCoW Should Have. Cobre o cenário da apresentação final (aproximadamente 10 pessoas); com menos clientes simultâneos, o sistema continua funcional, apenas reduzindo o número de avaliadores que podem acompanhar pela própria máquina

O contexto mais exigente é a apresentação final, na qual professores avaliadores e integrantes da equipe podem acompanhar o sistema simultaneamente. Considerando 5 professores avaliadores e aproximadamente 5 a 6 membros do grupo, totalizam-se cerca de 10 a 11 usuários simultâneos no pico de uso. O limite de ≥ 10 conexões simultâneas cobre esse cenário com folga mínima e deve ser explicitamente testado, dado que o sistema de telemetria mantém conexões WebSocket abertas continuamente, o que consome mais recursos do que requisições HTTP convencionais.

RNF-09 — Tamanho Máximo do Pacote de Telemetria

Atributo Valor
Descrição Tamanho máximo de cada pacote de dados enviado pelo Micromouse ao servidor por ciclo
Limite máximo ≤ 512 bytes por pacote
MoSCoW Should Have. Restringe o pacote ao buffer típico do ESP32 e evita fragmentação; pacotes maiores funcionam, mas elevam a latência e o risco de perda

Microcontroladores tipicamente utilizados em projetos Micromouse (como STM32 ou ESP32) possuem buffers de comunicação limitados. Pacotes menores reduzem também a latência de transmissão e o risco de fragmentação na rede. Os dados necessários por ciclo (posição, velocidade, nível de bateria e data_hora) podem ser representados em menos de 100 bytes com estrutura binária eficiente. O limite de 512 bytes é generoso o bastante para acomodar inclusive formatos textuais como JSON, mais convenientes para depuração durante o desenvolvimento.

O pacote de finalização trafega fora da cadência de 1 Hz e contém campos de tamanho variável dependentes do labirinto (path_traversed e known_walls); por isso é tratado como exceção. O limite de 512 bytes aplica-se exclusivamente aos pacotes da transmissão contínua.

4. Segurança

RNF-10 — Integridade dos Dados de Corrida

Atributo Valor
Descrição Os dados gravados no banco após uma corrida não devem poder ser modificados pela interface web
Requisito Interface de consulta somente leitura; nenhum endpoint de modificação ou exclusão exposto publicamente
MoSCoW Must Have. Os dados persistidos servem de evidência para avaliação; a possibilidade de edição comprometeria a credibilidade do registro

Como os dados são utilizados na avaliação acadêmica, é fundamental garantir que não haja possibilidade de alteração posterior dos resultados, seja acidental, seja intencional. A forma mais simples de assegurar essa propriedade é não implementar endpoints de atualização ou deleção no sistema web, restringindo qualquer eventual correção a uma operação administrativa direta no banco de dados, com acesso controlado.

Decisão registrada (10/06/2026): existe uma única operação administrativa de limpeza, DELETE /historico (item 7.25 do cronograma), restrita à máquina que executa o backend — requisições originadas de outros hosts da rede recebem 403 Forbidden (require_local_request em src/backend/app.py). Nenhum endpoint de edição ou exclusão é acessível publicamente pela rede; a restrição é verificada pelos testes do CT-40 em src/backend/tests/test_app.py.

5. Usabilidade

RNF-11 — Visibilidade dos Dados de Telemetria

Atributo Valor
Descrição Todos os seis campos de telemetria exigidos pelo projeto devem estar visíveis sem necessidade de rolagem
Campos obrigatórios Tipo do labirinto, trajeto, consumo de bateria, velocidade média, tempo de conclusão, desafio cumprido (S/N)
Requisito de layout Interface responsiva, adaptável a diferentes tamanhos de tela
MoSCoW Must Have. O enunciado lista explicitamente os seis campos exigidos na interface, que devem permanecer visíveis durante a apresentação

RNF-12 — Compatibilidade de Navegadores

Atributo Valor
Descrição A aplicação deve funcionar corretamente nos navegadores mais utilizados
Requisito Chrome ≥ 110, Firefox ≥ 110, Edge ≥ 110
MoSCoW Should Have. Suporte aos três principais navegadores evita a dependência de um equipamento específico no dia da avaliação, embora o funcionamento em apenas um deles ainda viabilize a entrega

A definição de um conjunto mínimo de navegadores suportados assegura o funcionamento do sistema nos equipamentos disponíveis durante as avaliações, independentemente do laboratório ou computador utilizado. As versões ≥ 110 foram escolhidas por oferecerem amplo suporte a APIs modernas como WebSocket, CSS Grid e Fetch API, recursos previstos para o desenvolvimento da interface de telemetria.

Restrições de Ambiente e Documentação de Software

1. Introdução

As restrições de ambiente delimitam as tecnologias e configurações que cada camada do sistema deve adotar. Estão organizadas em quatro grupos: firmware embarcado, backend, frontend e banco de dados. A explicitação dessas restrições assegura a homogeneidade do ambiente entre os integrantes do grupo e a viabilidade de execução no contexto acadêmico.

2. Firmware Embarcado

RE-01 — Microcontrolador

Atributo Valor
Tecnologia adotada ESP32
Linguagem C/C++ (framework Arduino ou ESP-IDF)
Restrição O firmware deve ser compilado e executado exclusivamente no ESP32

O ESP32 foi selecionado por integrar Wi-Fi nativamente, condição indispensável para a transmissão de telemetria em tempo real ao sistema web sem a necessidade de módulos adicionais. Trata-se também do microcontrolador com maior disponibilidade de bibliotecas para controle de motores, leitura de sensores infravermelhos e encoders, componentes centrais do Micromouse. Alternativas como o STM32 oferecem maior capacidade de controle em tempo real, mas exigiriam módulo Wi-Fi externo, o que aumentaria a complexidade do hardware.

RE-02 — Protocolo de Comunicação

Atributo Valor
Protocolo Wi-Fi (IEEE 802.11 b/g/n) + WebSocket
Restrição A comunicação entre robô e servidor deve ocorrer via rede local (LAN)
Frequência mínima de envio 1 pacote por segundo durante a corrida

O WebSocket sobre TCP foi adotado por viabilizar comunicação bidirecional em tempo real com o servidor, mantendo conexão persistente entre firmware e backend. A rede local elimina a dependência de internet durante as apresentações, o que assegura maior confiabilidade e latência compatível com RNF-01 e RNF-02.

RE-03 — Sensores Suportados

Atributo Valor
Sensores de distância Infravermelho (IR) ou ultrassônico (HC-SR04 ou similar)
Encoder de rodas Encoder incremental compatível com GPIO do ESP32
Restrição O firmware deve ler e processar dados de pelo menos 3 sensores de distância simultaneamente (frente, esquerda e direita)

A detecção de paredes em três direções constitui o mínimo necessário para que algoritmos de navegação como Flood Fill ou wall-following operem corretamente. O ESP32 dispõe de GPIOs suficientes para essa configuração, dispensando o uso de multiplexação.

3. Backend

RE-04 — Linguagem e Framework

Atributo Valor
Linguagem Python 3.10 ou superior
Framework FastAPI
Restrição O backend deve ser executável localmente, sem necessidade de infraestrutura em nuvem

Python é a linguagem de maior familiaridade entre os integrantes do grupo. O FastAPI foi preferido ao Flask por oferecer suporte nativo a WebSocket, condição essencial para a transmissão de telemetria em tempo real, e por adotar modelo assíncrono por padrão, o que viabiliza o atendimento simultâneo a múltiplas conexões (professores e integrantes durante a apresentação) com melhor desempenho. A execução local elimina dependências externas durante as apresentações.

RE-05 — Sistema Operacional do Servidor

Atributo Valor
Sistemas suportados Windows 10/11, Ubuntu 22.04 LTS, macOS 12 ou superior
Restrição O backend deve inicializar e operar corretamente em qualquer um dos sistemas listados

Como os integrantes utilizam diferentes sistemas operacionais em suas máquinas pessoais, a compatibilidade com os três sistemas mais comuns evita que a apresentação dependa de um equipamento específico. Python 3.10+ e FastAPI são multiplataforma por natureza, de modo que essa restrição é atendida sem esforço adicional, desde que as dependências sejam gerenciadas via requirements.txt ou ferramenta equivalente.

RE-06 — Gerenciamento de Dependências

Atributo Valor
Ferramenta pip + arquivo requirements.txt
Restrição Todas as dependências do backend devem estar listadas no requirements.txt com versões fixadas

A fixação de versões assegura comportamento idêntico do sistema em qualquer máquina onde for instalado, eliminando inconsistências decorrentes de atualizações silenciosas de pacotes.

4. Frontend

RE-07 — Tecnologias de Interface

Atributo Valor
Tecnologias React 19, Tailwind CSS
Restrição A interface utiliza o ecossistema React (via Create React App) e Tailwind para componentes visuais, exigindo processo de build com Node.js

O uso de React 19 e Tailwind CSS foi adotado para facilitar a criação de uma interface rica, componentizada e responsiva. Embora adicione a necessidade de um ambiente de build (Node.js, npm, Webpack via CRA), o ganho em produtividade e manutenibilidade para o desenvolvimento do dashboard, histórico e simulador compensa a complexidade adicional. A atualização em tempo real é implementada com WebSocket nativo do navegador, enquanto a Fetch API atende às consultas REST ao histórico.

RE-08 — Navegadores Suportados

Atributo Valor
Navegadores Google Chrome ≥ 110, Mozilla Firefox ≥ 110, Microsoft Edge ≥ 110
Restrição A interface deve funcionar corretamente em qualquer um dos navegadores listados, sem plugins adicionais

As versões ≥ 110 foram escolhidas por assegurarem suporte completo a WebSocket, CSS Grid, Flexbox e Fetch API. Trata-se ainda de versões amplamente adotadas, presentes na maioria dos notebooks atuais sem necessidade de atualização.

RE-09 — Layout Responsivo

Atributo Valor
Restrição A interface deve adaptar-se a telas de notebooks e desktops convencionais sem perda de usabilidade
Referência mínima Telas com largura a partir de 1024 px

Durante as apresentações, diferentes dispositivos podem ser utilizados para acessar a interface. Assegurar funcionamento a partir de 1024 px cobre a grande maioria dos notebooks atuais, dispensando a otimização para dispositivos móveis, que não integram o escopo de uso do sistema.

5. Banco de Dados

RE-10 — Sistema de Banco de Dados

Atributo Valor
Tecnologia SQLite 3
Restrição O banco de dados deve ser um arquivo local, sem necessidade de servidor dedicado

O SQLite foi adotado por ser um banco baseado em arquivo. Para o volume de dados esperado (aproximadamente 100 corridas, totalizando cerca de 1 MB), o SQLite oferece desempenho mais que suficiente. Sua portabilidade também constitui vantagem operacional, dado que o banco se materializa como um único arquivo passível de cópia, versionamento e compartilhamento entre os integrantes do grupo.

RE-11 — Acesso ao Banco de Dados

Atributo Valor
Biblioteca SQLAlchemy (ORM) ou sqlite3 (biblioteca padrão do Python)
Restrição O acesso ao banco deve ser realizado exclusivamente pelo backend; a interface web não deve ter acesso direto ao banco

A centralização do acesso ao banco no backend assegura que toda escrita e leitura percorram uma camada de validação, o que previne inconsistências e atende ao requisito de integridade dos dados (RNF-10). O uso de SQLAlchemy como ORM facilita a manutenção do código e a eventual migração para outro banco, caso necessário.

6. Resumo das Restrições Tecnológicas

A síntese a seguir consolida as restrições tecnológicas por camada, registrando a versão mínima associada a cada item.

ID Camada Tecnologia Versão mínima
RE-01 Firmware ESP32 (C/C++) ESP-IDF 5.0 / Arduino Core 2.0
RE-02 Firmware Wi-Fi + WebSocket IEEE 802.11 b/g/n
RE-03 Firmware Sensores IR/ultrassônicos + encoder ≥ 3 sensores de distância (frente, esquerda, direita)
RE-04 Backend Python + FastAPI Python 3.10
RE-05 Backend Windows / Ubuntu / macOS Win 10, Ubuntu 22.04, macOS 12
RE-06 Backend pip + requirements.txt Dependências com versões fixadas
RE-07 Frontend React 19 + Tailwind CRA (Node.js)
RE-08 Frontend Chrome / Firefox / Edge versão 110
RE-09 Frontend Layout responsivo largura ≥ 1024px
RE-10 Banco de dados SQLite 3 versão 3.35+
RE-11 Banco de dados SQLAlchemy ou sqlite3 Acesso exclusivo pelo backend