▶ Slides ← Módulo
Módulo 2 · Ciclo Comum · IN02

Introdução aos Sistemas Web

Aula 1 — Material de Leitura Aprofundado

1. O que é a Web?

Antes de escrever uma linha de código, precisamos entender o sistema que vamos construir. A World Wide Web (Web) não é sinônimo de Internet — ela é uma aplicação que roda sobre a Internet. A Internet é a infraestrutura física e de protocolos (cabos, roteadores, TCP/IP). A Web é um conjunto de padrões — HTTP, HTML, URLs — que permite que máquinas em qualquer lugar do planeta troquem documentos e dados de forma padronizada.

Tim Berners-Lee criou a Web em 1989 no CERN para resolver um problema simples: físicos precisavam compartilhar documentos entre computadores incompatíveis. A solução foi um protocolo de texto (HTTP) sobre uma rede existente (TCP/IP) com documentos conectados por links (HTML). Essa combinação — simples por design — tornou-se a maior plataforma de software da história.

📌 Definição precisa

Internet: rede global de computadores conectados por protocolos TCP/IP.
Web: sistema de documentos interligados acessíveis via HTTP/HTTPS sobre a Internet.
Sistema Web: aplicação que usa os protocolos e padrões da Web para entregar uma funcionalidade específica.

Hoje, quando falamos em "construir um sistema web", não falamos apenas de sites. Falamos de sistemas que usam HTTP para trocar dados entre um cliente (navegador, aplicativo móvel, outro servidor) e um servidor — independente de ter ou não uma interface visual. Uma API que retorna JSON puro é um sistema web tão legítimo quanto uma plataforma de e-commerce com milhões de páginas.

Por que isso importa para engenheiros?

Porque a arquitetura que escolhemos — e as decisões que tomamos — são moldadas pelas restrições e garantias do protocolo HTTP. HTTP é stateless (sem estado): cada requisição é independente, o servidor não "lembra" de requisições anteriores a não ser que você persista essa informação explicitamente. Essa característica força certas decisões de design — cookies, tokens de sessão, JWTs — que aparecem diretamente no código que você vai escrever.

2. Arquitetura Cliente-Servidor

A arquitetura cliente-servidor é o padrão dominante em sistemas web. Ela divide as responsabilidades em dois papéis fundamentais: o cliente, que faz requisições, e o servidor, que responde a elas. Essa separação não é apenas organizacional — ela tem implicações diretas em escalabilidade, segurança, manutenção e custo.

🧑‍💻ClienteNavegador / App
HTTP Request
🖥️ServidorNode.js + Express
SQL Query
🗄️Banco de DadosPostgreSQL

Clique no diagrama ou role a página para ver a animação

O papel de cada camada

Cada camada tem uma responsabilidade bem definida. Misturar essas responsabilidades — colocar lógica de banco no HTML, ou validação de negócio no SQL — é o início do código espaguete que torna sistemas difíceis de manter.

CamadaResponsabilidade principalTecnologias comunsO que NÃO deve fazer
ClienteRenderizar interface, coletar input do usuário, exibir respostasHTML, CSS, JavaScript, React, VueGuardar lógica de negócio crítica ou dados sensíveis
ServidorReceber requisições, validar dados, executar regras de negócio, coordenar respostasNode.js, Python, Java, GoMisturar lógica de apresentação com lógica de dados
Banco de DadosPersistir, consultar e garantir integridade dos dadosPostgreSQL, MySQL, MongoDBConter lógica de aplicação além de constraints simples
RedeTransportar mensagens de forma confiável entre cliente e servidorHTTP, HTTPS, WebSocket, TCP/IPSer ignorada no design — latência e falhas são reais
⚠️ Erro comum de iniciante

Colocar validação de dados apenas no front-end. O navegador pode ser manipulado. Toda validação crítica deve existir no servidor, independente de existir ou não no cliente. O front-end valida para experiência do usuário; o servidor valida por segurança.

Escalando além do básico: arquiteturas de múltiplas camadas

O modelo acima é a forma mais simples. Em sistemas reais, essas camadas se multiplicam. Um servidor pode chamar outro servidor (microsserviços). Pode haver um load balancer na frente de múltiplas instâncias do servidor. O banco pode ser lido a partir de uma réplica de leitura. Existe um CDN (Content Delivery Network) que armazena assets estáticos próximo do usuário.

Para esta disciplina, o modelo de três camadas é suficiente — mas saber que ele pode crescer é importante para que suas decisões hoje não criem barreiras para o futuro. Isso é o que a visão Engineering do RM-ODP (que veremos adiante) tenta capturar.

🔬 Aprofundamento: Stateless vs Stateful — por que HTTP é stateless?

HTTP foi projetado para ser stateless por uma razão de design elegante: simplificar os servidores. Se cada requisição carrega toda a informação necessária para ser processada, o servidor não precisa manter um estado de sessão em memória. Qualquer servidor na rede pode responder qualquer requisição — o que permite escalar horizontalmente com facilidade.

O preço é que você, como desenvolvedor, precisa incluir explicitamente o estado necessário em cada requisição. Para autenticação, isso se faz com tokens (enviados no header Authorization). Para preferências do usuário, isso se faz com cookies. Para dados de sessão entre páginas, isso se faz com sessionStorage ou localStorage no cliente.

Protocolo stateful como WebSocket é diferente: a conexão persiste, e o servidor mantém o estado da conversa. Isso é útil para chats em tempo real e jogos online, mas adiciona complexidade de gerenciamento de conexões.

3. O Protocolo HTTP

HTTP — HyperText Transfer Protocol — é o protocolo de comunicação da Web. Foi criado por Tim Berners-Lee em 1991 na versão 0.9 (só GET, só HTML). Hoje, na versão HTTP/3, suporta multiplexação de requisições, compressão de headers e transporte sobre UDP (QUIC). Para sistemas web comuns, a versão que você mais verá é HTTP/1.1 e HTTP/2.

O modelo fundamental é simples: o cliente envia uma requisição e o servidor responde com uma resposta. Ambas têm a mesma estrutura: uma linha de início, headers (cabeçalhos), uma linha em branco e opcionalmente um corpo.

1
Usuário digita https://api.exemplo.com/usuarios ou clica em um botão
2
Navegador resolve o DNS: api.exemplo.com → 203.0.113.42
3
Estabelece conexão TCP (e TLS handshake para HTTPS)
4
Envia a requisição: GET /usuarios HTTP/1.1 com headers
5
Servidor processa: valida autenticação, consulta banco, monta resposta
6
Servidor responde: HTTP/1.1 200 OK com headers e corpo JSON
7
Navegador recebe, parseia o JSON, atualiza o DOM — o usuário vê os dados

Anatomia de uma requisição HTTP

Requisição HTTP — exemplo real
POST /api/usuarios HTTP/1.1
Host:           api.exemplo.com
Content-Type:   application/json
Authorization:  Bearer eyJhbGciOiJIUzI1NiJ9...
Accept:         application/json

{
  "nome":  "Ana Lima",
  "email": "ana@inteli.edu.br",
  "senha": "minhaSenhaSegura123"
}

Anatomia de uma resposta HTTP

Resposta HTTP — exemplo real
HTTP/1.1 201 Created
Content-Type:   application/json; charset=utf-8
Location:       /api/usuarios/42
X-Request-Id:   a1b2c3d4

{
  "id":        42,
  "nome":      "Ana Lima",
  "email":     "ana@inteli.edu.br",
  "criado_em": "2026-04-03T10:30:00Z"
}

Observe os headers: eles carregam metadados sobre a requisição/resposta sem poluir o corpo. Content-Type diz ao receptor como interpretar o corpo. Authorization carrega as credenciais. Location na resposta indica onde o recurso recém-criado pode ser encontrado — isso é parte do padrão REST.

4. Métodos HTTP

Os métodos HTTP — também chamados de verbos — definem a intenção da operação. Não é apenas convenção: o protocolo define propriedades matemáticas formais para cada método que guiam implementações de caches, proxies e clientes.

Idempotência significa que múltiplas requisições idênticas produzem o mesmo resultado que uma única. GET, PUT, DELETE e PATCH (quando bem implementado) são idempotentes. POST não é: chamar POST /pedidos duas vezes cria dois pedidos.

GET
Recupera um recurso. Não deve modificar o estado do servidor.
GET /api/produtos
GET /api/produtos/42
Idempotente? Sim. Corpo? Não.

GET é o método mais usado. Requisições GET podem ser cacheadas, favoritadas, indexadas por buscadores. Nunca use GET para operações que modificam dados — além de errado semanticamente, um robô de busca poderia "visitar" o link e apagar registros acidentalmente.
POST
Cria um novo recurso. O servidor define o ID do recurso criado.
POST /api/usuarios
POST /api/pedidos
Idempotente? Não. Corpo? Sim.

POST é usado para criação. A resposta deve retornar 201 Created com o header Location apontando para o novo recurso. Chamar POST duas vezes cria dois recursos — implemente idempotência na aplicação se necessário (ex: chave de idempotência no header).
PUT
Substitui completamente um recurso existente. Envia o objeto inteiro.
PUT /api/usuarios/42
PUT /api/produtos/5
Idempotente? Sim. Corpo? Sim (objeto completo).

PUT substitui o recurso inteiramente. Se você enviar um objeto sem um campo, esse campo é apagado. Use quando quiser atualização total e determinista. Chamar PUT duas vezes com o mesmo corpo produz o mesmo resultado.
PATCH
Atualiza parcialmente um recurso. Envia apenas os campos a modificar.
PATCH /api/usuarios/42
Body: {"nome": "Ana Silva"}
Idempotente? Depende da implementação. Corpo? Sim (parcial).

PATCH é mais eficiente que PUT quando você quer mudar apenas um campo de um objeto grande. Porém, sua semântica é mais complexa — o servidor precisa saber como mesclar os campos. Em projetos menores, PATCH é frequentemente omitido em favor de PUT.
DELETE
Remove um recurso do servidor.
DELETE /api/usuarios/42
DELETE /api/pedidos/7
Idempotente? Sim (segunda chamada retorna 404). Corpo? Normalmente não.

DELETE deve retornar 204 No Content em caso de sucesso sem corpo, ou 200 OK com o objeto deletado se quiser confirmar o que foi removido. Implemente soft delete (marcar como inativo) quando os dados precisam ser auditados.

↑ Clique em qualquer card para expandir os detalhes.

5. Status Codes

Os status codes são números de 3 dígitos que o servidor inclui na resposta para indicar o resultado da operação. Eles são organizados em 5 famílias pelo primeiro dígito. Usar o status correto não é detalhe cosmético — é o que permite que clientes, proxies e ferramentas de monitoramento interpretem o resultado sem precisar ler o corpo da resposta.

200OK
201Created
204No Content
301Moved Permanently
304Not Modified
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
422Unprocessable Entity
500Internal Server Error
502Bad Gateway
503Service Unavailable
← Clique em um código para ver a explicação detalhada.
🚨 Anti-padrão frequente

Retornar 200 OK com {"erro": "usuário não encontrado"} no corpo. Isso quebra a semântica HTTP, ilude ferramentas de monitoramento e força o cliente a ler o corpo para detectar falhas. Use sempre o status correto — 404 nesse caso.

6. JSON — A Língua Franca da Web

JSON (JavaScript Object Notation) tornou-se o formato de troca de dados dominante em APIs web. Não porque seja o mais eficiente (protobuf e MessagePack são mais compactos), mas porque é legível por humanos, suportado nativamente em JavaScript e suficientemente simples para ser implementado em qualquer linguagem com poucas linhas de código.

JSON tem exatamente 6 tipos de valor: string, number, boolean, null, array e object. Essa simplicidade é proposital — ela reduz ambiguidades e facilita a interoperabilidade entre sistemas escritos em linguagens diferentes.

📄 JSON — objeto de pedido
{
  "id": 1042,
  "cliente": {
    "id": 7,
    "nome": "Ana Lima",
    "email": "ana@exemplo.com"
  },
  "itens": [
    {
      "produto": "Notebook",
      "quantidade": 1,
      "preco_unit": 2499.90
    },
    {
      "produto": "Mouse",
      "quantidade": 2,
      "preco_unit": 89.90
    }
  ],
  "total": 2679.70,
  "status": "aprovado",
  "criado_em": "2026-04-03T14:22:00Z",
  "enviado": false
}
🔍 Anotado — o que cada tipo representa
// number — inteiro positivo (ID gerado pelo banco)
"id": 1042

// object aninhado — recurso relacionado
"cliente": { ... }

// array de objects — coleção de itens
"itens": [ {...}, {...} ]

// number — ponto flutuante (use string para
// dinheiro em sistemas financeiros críticos)
"preco_unit": 2499.90

// string — enum de texto (melhor que 0/1/2)
"status": "aprovado"

// string — datas em ISO 8601 (UTC)
"criado_em": "2026-04-03T14:22:00Z"

// boolean — true ou false, sem aspas
"enviado": false
💡 Dica de design de API

Prefira strings para enums ("status": "aprovado") a números ("status": 2). Strings são autodescritivas — um desenvolvedor lendo o JSON imediatamente entende o valor sem consultar documentação. Prefira ISO 8601 para datas ("2026-04-03T14:22:00Z") — é um padrão internacional parseado diretamente pelo JavaScript (new Date(str)).

Parseando JSON em JavaScript

JavaScript — fetch + JSON
// Aula 8 vai aprofundar isso — por ora, o padrão fundamental:

const resposta = await fetch('/api/pedidos/1042');

if (!resposta.ok) {
  // resposta.ok é true para status 200-299
  throw new Error(`Erro HTTP: ${resposta.status}`);
}

const pedido = await resposta.json(); // parse automático

console.log(pedido.cliente.nome); // "Ana Lima"
console.log(pedido.total);        // 2679.70
console.log(pedido.itens.length); // 2

7. Nossa Stack

A stack é o conjunto de tecnologias que compõe o sistema. Nesta disciplina, usamos uma stack JavaScript de ponta a ponta — tanto no front quanto no back-end — com PostgreSQL como banco relacional. Essa escolha não é por exclusão das alternativas, mas por coerência pedagógica: você aprende uma linguagem profundamente antes de comparar com outras.

TecnologiaCamadaPor que usamosAlternativas comuns
HTML / CSS / JSFront-EndPadrões da Web. Sem framework para não esconder o fundamento.React, Vue, Angular, Svelte
Node.jsBack-End (runtime)JavaScript no servidor. I/O não-bloqueante. Mesma linguagem do front.Python, Java, Go, Ruby, PHP
Express.jsBack-End (framework)Minimalista. Sem magia. Você vê exatamente o que está acontecendo.Fastify, NestJS, Koa, Hapi
PostgreSQLBanco de DadosSQL completo, ACID, open-source, amplamente usado em produção.MySQL, SQLite, MongoDB, Redis
JestTestesPadrão de mercado em JavaScript. Suporte a mocks, cobertura e snapshots.Vitest, Mocha, Playwright
ℹ️ Node.js — o modelo de I/O assíncrono

Node.js usa um único thread com um event loop — diferente de Java/Python que criam um thread por requisição. Isso permite lidar com milhares de conexões simultâneas com baixo consumo de memória, desde que o código não bloqueie o event loop com operações pesadas de CPU. Aula 5 aprofunda isso.

8. RF, RN e RNF — Classificando Requisitos

Um dos maiores erros em projetos de software é começar a codificar sem saber ao certo o que o sistema precisa fazer e como precisa operar. Os requisitos são a tradução do problema de negócio em especificações verificáveis. Aprender a distingui-los é fundamental para o trabalho de engenharia.

Requisito Funcional (RF)

Descreve o que o sistema faz — comportamentos observáveis, funcionalidades, ações que o usuário pode realizar. É verificável por testes funcionais: ou o sistema faz, ou não faz.

📋 Exemplos de RF bem escritos

"O sistema deve permitir que um usuário autenticado registre um pedido com pelo menos um item."
"O sistema deve exibir os produtos em ordem de preço crescente quando solicitado."
"O sistema deve enviar e-mail de confirmação após o cadastro de um novo usuário."

Regra de Negócio (RN)

Define restrições e condições que governam o comportamento do sistema. Regras de negócio são geralmente derivadas de requisitos legais, contratuais ou de domínio — e mudam com mais frequência que o código. Separar RN de RF permite que mudanças de negócio sejam localizadas sem reescrever a aplicação inteira.

📋 Exemplos de RN bem escritas

"Um usuário só pode ter um endereço de e-mail — o campo email deve ser único no banco."
"Um pedido só pode ser cancelado se estiver no status 'pendente' ou 'em preparo'."
"O estoque de um produto não pode ficar negativo após uma venda."

Requisito Não Funcional (RNF)

Descreve como o sistema opera — qualidade, desempenho, segurança, usabilidade. São os atributos que diferenciam um sistema que "funciona" de um sistema que "funciona bem". O erro mais frequente de iniciantes é expressar RNF como opinião vaga.

🚨 RNF fraco vs RNF forte

"O sistema deve ser rápido." — Não especifica o quê, quanto, sob qual carga, em qual ambiente.

"O endpoint GET /produtos deve responder com p99 abaixo de 300ms sob 100 requisições simultâneas no ambiente de produção, validado por teste de carga com relatório Grafana k6."

Um RNF de engenharia precisa responder 6 perguntas: qual eixo de qualidade? qual operação é observada? qual carga ou condição de uso? qual métrica? qual limiar aceitável? como é evidenciado?

Template de RNF mensurável
No eixo [qualidade], o sistema deve [comportamento observável]
sob [condição/carga], medido por [métrica],
com limite [valor], validado por [teste/ferramenta].

-- Exemplo preenchido:
"No eixo eficiência de desempenho, o endpoint POST /pedidos
 deve responder com p99 abaixo de 500ms sob 50 requisições
 simultâneas em ambiente de staging, medido por k6,
 validado na pipeline de CI após cada deploy."

Como RF, RN e RNF se relacionam

TipoPergunta respondidaQuem defineComo é verificado
RFO que o sistema faz?Product Owner, usuáriosTestes funcionais, E2E, demonstração
RNQue restrições limitam o comportamento?Especialista de domínio, juridicoTestes unitários de regra, validação de banco
RNFComo o sistema opera?Arquiteto, equipe técnicaTestes de carga, auditoria de segurança, métricas

9. Os 8 Eixos de RNF (ISO/IEC 25010)

Nesta disciplina, usamos uma decomposição de qualidade em 8 eixos, baseada na norma ISO/IEC 25010 (SQuaRE — Systems and Software Quality Requirements and Evaluation). Essa norma é a referência internacional para qualidade de software e aparece no SWEBOK v4, o corpo de conhecimento oficial da engenharia de software. Ela evoluiu da ISO/IEC 9126 (1991) e expande o escopo para considerar não só o produto, mas o sistema operando em seu contexto real.

Os eixos não são silos independentes: eles se cruzam, se reforçam e frequentemente conflitam entre si. Uma decisão arquitetural que melhora um eixo pode piorar outro — e reconhecer isso é o que separa o engenheiro que escreve requisitos do que apenas lista desejos. Ao documentar RNF do seu projeto, você deve sempre explicitar em qual eixo está trabalhando, qual métrica será medida e qual limite é aceitável.

🎯 Por que RNF é decisivo na engenharia

RFs definem se o sistema faz o que deveria. RNFs definem se o sistema sobrevive em produção. A maioria das falhas pós-deploy — quedas sob pico de acesso, vazamento de dados, indisponibilidade em black friday, bug que não pôde ser corrigido em tempo — são falhas de RNF, não de RF. Tratar RNF como "detalhe técnico" é o maior risco arquitetural de um projeto.

USAB
Usabilidade
O usuário entende e opera o sistema com eficiência e satisfação?
"95% dos usuários concluem o cadastro em até 2 min sem ajuda."
CONF
Confiabilidade
O sistema opera corretamente mesmo sob falhas?
"Retry automático para 502/503 com backoff exponencial, taxa de sucesso ≥99,5%."
DES
Desempenho
Quão rápido e eficiente o sistema opera sob carga?
"GET /produtos com p99 <300ms sob 100 req/s simultâneas."
SUP
Suportabilidade
O sistema pode ser alterado, depurado e mantido com segurança?
"Controllers, services e repositórios separados. Cobertura de testes ≥70%."
SEG
Segurança
O sistema protege dados e operações contra acessos indevidos?
"Senhas com bcrypt. Rotas protegidas retornam 401 sem token válido."
CAP
Capacidade
O sistema comporta a quantidade esperada de dados e usuários?
"Banco suporta 1M de pedidos com índices em usuario_id e criado_em."
REST
Restrições de Design
Quais escolhas tecnológicas são mandatórias ou proibidas?
"Stack Node.js + PostgreSQL. Deploy em container. Sem dependências proprietárias."
ORG
Organizacionais
O sistema respeita restrições de prazo, equipe e processo?
"Entrega em sprint de 2 semanas. CI obrigatório. Code review por par."

Métricas e ferramentas típicas por eixo

Para cada eixo, existem métricas reconhecidas e ferramentas que geram evidência objetiva. Essa tabela é seu ponto de partida — memorize a relação entre eixo, métrica e ferramenta, porque é isso que torna um RNF auditável.

EixoMétricas típicasFerramentas de evidênciaAnti-padrão comum
USABTempo de tarefa, taxa de sucesso, SUS score, cliques para concluirMaze, Lookback, testes de usabilidade moderados, heurísticas de Nielsen"Interface amigável" — sem métrica nem critério objetivo
CONFMTBF, MTTR, uptime, taxa de sucesso de retries, error ratePingdom, UptimeRobot, alertas de SLO no Grafana, chaos testing"Sistema robusto" — sem definir tolerância a falhas
DESp50/p95/p99 de latência, throughput (req/s), tempo de respostak6, JMeter, Artillery, Apache Bench, dashboards APM (Datadog, New Relic)"Rápido" sem especificar sob qual carga nem em qual percentil
SUPCobertura de testes, tempo médio para corrigir bug, cyclomatic complexityJest coverage, SonarQube, ESLint, git log de hotfixes"Código limpo" sem métrica objetiva de qualidade
SEGCVSS score, tempo até patch, taxa de logs de acesso indevido, OWASP coverageOWASP ZAP, Snyk, bcrypt, auditoria manual, SAST/DAST"Sistema seguro" — sem threat model documentado
CAPVolume máximo de dados, nº máximo de usuários concorrentes, taxa de crescimentoAnálise de consultas no banco, EXPLAIN, benchmarks de carga progressivaNão planejar para crescimento 10x do volume atual
RESTLista fechada de tecnologias aceitas, versões mínimas exigidasValidação em CI (check de dependências), revisão arquiteturalNão documentar o que é obrigatório vs permitido
ORGDuração da sprint, tamanho da equipe, SLA de code review, orçamentoFerramentas de gestão (Jira, Linear), políticas de repositórioMisturar restrições de processo com requisitos técnicos

9.1 Trade-offs entre Eixos — quando qualidade é escolha

Nenhum sistema maximiza todos os 8 eixos simultaneamente. Cada decisão arquitetural troca um eixo por outro, e reconhecer essas tensões é o que separa o projeto viável do projeto utópico. Abaixo, as tensões mais frequentes em sistemas web — e como elas se manifestam no seu código.

TensãoDecisão que favorece o primeiroO que o segundo perde
Segurança × DesempenhoHash bcrypt caro em loginLatência de autenticação aumenta; pode exigir cache de sessão
Segurança × UsabilidadeMFA obrigatório e timeout curto de sessãoMais fricção, queda na taxa de conclusão de tarefas
Desempenho × ConfiabilidadeCache agressivo em memóriaDados desatualizados em caso de falha do cache
Desempenho × SuportabilidadeOtimização manual, queries complexasCódigo mais difícil de ler, testar e alterar
Capacidade × Custo (ORG)Banco com réplicas e sharding desde o inícioCusto de infraestrutura sobe; time precisa operar mais peças
Restrições × SuportabilidadeStack fixada em tecnologias legadasMenos bibliotecas modernas, onboarding mais difícil
Usabilidade × ConfiabilidadeAuto-save frequente, feedback em tempo realMais requisições, mais pontos de falha
💡 Princípio da decisão explícita

Quando um eixo conflita com outro, documente a escolha. Em vez de "o sistema será seguro e rápido", escreva: "priorizamos SEG sobre DES — login com bcrypt (custo 12). Aceitamos latência de autenticação até 400ms p95.". A decisão explícita protege o projeto de regressões acidentais e alinha a equipe.

9.2 Redigindo RNF Mensuráveis — o esqueleto SMART-E

Um RNF mal redigido é pior que um RNF ausente: ele cria a ilusão de que o atributo foi tratado, quando na verdade não há como verificar. Use o esqueleto SMART-ESpecific, Measurable, Achievable, Relevant, Time-bound + Evidence — adaptado para requisitos de qualidade.

Esqueleto SMART-E para RNF
[1] EIXO         → Qual dos 8 eixos de qualidade é o alvo?
[2] ESPECIFICAÇÃO→ Qual operação / componente / fluxo está sendo qualificado?
[3] CONDIÇÃO     → Sob qual carga, ambiente ou cenário?
[4] MÉTRICA      → O que é medido? (latência, taxa, tempo, volume)
[5] LIMIAR       → Qual valor numérico define passa/falha?
[6] EVIDÊNCIA    → Qual ferramenta ou teste gera a prova?
[7] PRAZO        → Quando o limite passa a valer? (sprint atual, release X)

─── Exemplo aplicado ───
"No eixo DESEMPENHO [1], o endpoint POST /pedidos [2]
 sob 50 req/s concorrentes em staging [3] deve ter
 latência p95 [4] abaixo de 500 ms [5], validada por
 teste k6 na pipeline de CI [6], a partir da Sprint 3 [7]."

Da frase vaga ao RNF auditável — três exemplos

Frase vaga do stakeholderEixoRNF redigido (auditável)
"O sistema não pode cair" CONF "O endpoint GET /produtos deve manter disponibilidade ≥99,5% em janela mensal, medida por UptimeRobot com probes a cada 60s, aplicável a partir do release 1.0."
"Tem que ser seguro" SEG "Rotas sob /admin devem exigir token JWT válido e role=admin, retornando 401/403. Validado por testes automatizados de autorização em CI. Patch de CVEs críticas (CVSS ≥7) em até 5 dias úteis."
"Tem que suportar muita gente" CAP "O banco deve suportar 100k pedidos por dia mantendo p95 de SELECT abaixo de 200ms. Validado por seed + EXPLAIN ANALYZE em staging. Índice obrigatório em (cliente_id, criado_em)."
⚠️ Sinais de RNF mal redigido

• Usa adjetivos sem métrica: rápido, seguro, amigável, robusto, escalável.
• Não cita a ferramenta ou teste que gera evidência.
• Não especifica a carga/condição sob a qual o limite vale.
• Mistura dois eixos na mesma frase (quebre em dois RNF).
• É uma opinião sem operador de comparação (≤, ≥, <, >, =).

9.3 Priorização de Eixos por Tipo de Sistema

Nem todo sistema precisa ser ótimo em todos os 8 eixos. A priorização depende do contexto — tipo de negócio, volume de usuários, maturidade da equipe, regulação. A tabela abaixo sugere eixos críticos (onde falha é inaceitável) e importantes (onde se deve investir) em perfis comuns de sistema web.

Tipo de sistemaEixos críticosEixos importantesEixos secundários
E-commerce B2CDES, CONF, SEGUSAB, CAPSUP, REST, ORG
Sistema bancário / financeiroSEG, CONF, CAPDES, RESTUSAB, SUP, ORG
Aplicação médica / saúdeSEG, CONF, REST (LGPD/HIPAA)USAB, SUPDES, CAP, ORG
Ferramenta interna / B2BSUP, USABCONF, SEGDES, CAP, REST, ORG
Sistema educacionalUSAB, DESCONF, SUPSEG, CAP, REST, ORG
API públicaDES, SEG, CONFCAP, SUPUSAB, REST, ORG
Pipeline de dados / ETLCONF, CAP, DESSUP, RESTUSAB, SEG, ORG
📌 Como aplicar no seu projeto do módulo

Na sprint 1, você entrega RNF mínimos: pelo menos 1 por eixo crítico e 1 por eixo importante. Os demais podem ser "não se aplica nesta fase" — mas documente isso explicitamente. Um projeto que entrega só "funciona localmente" e ignora os eixos não tem RNF; tem esperança.

🔬 Aprofundamento: Como a ISO/IEC 25010 organiza qualidade

A ISO/IEC 25010 decompõe qualidade de software em 8 características principais, cada uma com sub-características. Por exemplo, Desempenho (Performance Efficiency) se decompõe em Time Behavior, Resource Utilization, Capacity. Segurança se decompõe em Confidentiality, Integrity, Non-repudiation, Authenticity, Accountability.

Nesta disciplina, usamos uma adaptação pedagógica com 8 eixos (as 8 características + REST e ORG como eixos de contexto). A decomposição mais granular da norma é útil quando você precisa detalhar um RNF em múltiplos testes — por exemplo, um RNF de Segurança geralmente produz 3-5 RNFs menores (um para autenticação, um para autorização, um para auditoria, um para criptografia em trânsito).

Além das 8 características de qualidade do produto, a ISO/IEC 25010 define 5 características de qualidade em uso: Effectiveness, Efficiency, Satisfaction, Freedom from Risk, Context Coverage. Essas são medidas no usuário real, não no código — são usadas em validação pós-deploy, não em critérios de aceite de sprint.

10. Minimundo — Descrevendo o Domínio

Antes de modelar entidades, desenhar telas ou escrever código, você precisa entender o problema. O minimundo é uma descrição textual do domínio em linguagem natural — sem jargão técnico, sem menção a tecnologias. Ele captura quem são os atores, o que fazem, quais informações manipulam e o que está fora do escopo.

Um bom minimundo é escrito da perspectiva do negócio, não do software. "O sistema tem uma tabela de usuários" não é minimundo — é já uma decisão de implementação. "Atendentes precisam registrar pedidos dos clientes" é minimundo.

Exemplo de minimundo completo

📖 Minimundo — Loja Universitária

Uma loja de campus vende camisetas, cadernos e canecas. Dois atendentes registram pedidos no balcão e precisam consultar o estoque antes de confirmar a venda. O gerente acompanha relatórios de vendas diárias e recebe alertas quando o estoque de algum produto está abaixo de 10 unidades.

Os clientes são cadastrados com nome e e-mail. Um cliente pode fazer vários pedidos. Cada pedido tem pelo menos um item, e cada item referencia um produto com quantidade e preço unitário no momento da compra. O pedido tem um status que evolui de "pendente" para "confirmado" ou "cancelado".

Fora do escopo desta etapa: emissão de nota fiscal, integração com meios de pagamento online, entrega e rastreamento.

Do minimundo às entidades

Substantivos no minimundo tendem a virar entidades (tabelas). Verbos tendem a virar relacionamentos ou operações. Adjetivos e dados associados tendem a virar atributos.

Trecho do minimundoEntidadeAtributos principais
"clientes são cadastrados com nome e e-mail"Clienteid, nome, email, criado_em
"registrar pedidos"Pedidoid, cliente_id, status, total, criado_em
"cada item referencia um produto"ItemPedidoid, pedido_id, produto_id, quantidade, preco_unit
"produtos com estoque"Produtoid, nome, preco, estoque_atual
⚠️ Armadilha: solução prematura

Ao escrever o minimundo, evite incluir tecnologias ou decisões de implementação. "O sistema usará JWT para autenticação" não pertence ao minimundo — pertence à especificação técnica. O minimundo descreve o problema; a especificação técnica descreve a solução.

11. Casos de Uso — a Narrativa de cada Requisito

Quando você escreve um requisito funcional como "o atendente registra um pedido", a frase resume um objetivo. Um caso de uso (use case, UC) é o filme desse objetivo: um roteiro passo a passo que descreve como o ator interage com o sistema para atingir o resultado — incluindo o que dá errado, quais exceções tratar e em que estado o sistema termina.

Use cases preenchem uma lacuna importante na documentação. Os RFs dizem o que o sistema faz. As RNs dizem quais regras governam. Os RNFs dizem como o sistema opera. Mas nenhum deles explica, em linguagem comum, a sequência de passos que precisa existir no código. É aí que os UCs entram.

🎬 O que é um Use Case?

Uma descrição narrativa de como um ator (pessoa ou sistema) interage com o software para alcançar um objetivo de negócio.

Não é tela, não é código — é o "filme" do que acontece passo a passo, incluindo o que dá errado.

🔗 De RF para UC

Cada RF de alto nível vira um ou mais UCs detalhados. O RF é o título; o UC é o capítulo.

RF-01 Atendente registra pedido  →  UC-01 Registrar Pedido · UC-02 Cancelar Pedido · UC-03 Consultar Status.

🗣️ Linguagem comum

Negócio e desenvolvimento falam a mesma história — sem ambiguidade, sem jargão técnico desnecessário.

🔀 Cobre caminhos tortos

Fluxos alternativos capturam o que pode dar errado antes de virar bug em produção.

✅ Base de testes

Cada fluxo vira um cenário de teste com entrada, passos e resultado esperado.

11.1 Anatomia de um Use Case — os 7 campos obrigatórios

Um UC bem formado segue um template estável. Qualquer pessoa do time — PM, dev, QA, ops — deve conseguir ler e extrair a informação de que precisa sem ter que decifrar estilo pessoal. Os 7 campos abaixo são obrigatórios. Campos adicionais (frequência, restrições de tempo, atores envolvidos, referências) são opcionais e entram caso o domínio exija.

UC-ID
Identificação + Nome

Código único e nome no infinitivo: "Registrar Pedido", "Cancelar Reserva". Um verbo + um objeto — sem adjetivos, sem detalhes de UI.

ATOR
Ator(es) principal(is) e secundário(s)

Papel que dispara o caso — não é pessoa específica. Ex.: Atendente, Gerente, Sistema de Pagamento. Ator secundário é quem o sistema consulta durante o fluxo.

PRÉ
Pré-condição

Estado do sistema antes de o UC começar. "Atendente autenticado com role=atendente", "Produto existe no catálogo". Se a pré-condição falha, o UC simplesmente não roda — não é um fluxo alternativo.

FLUXO
Fluxo Principal (caminho feliz)

Passos numerados alternando ator → sistema → ator → sistema, até o objetivo. Um verbo por passo, no imperativo. Nada de "o usuário deseja"; use "Informar CPF", "Selecionar item".

ALT
Fluxos Alternativos e Exceções

Numere os desvios: "A1 (no passo 3): se X, então Y"; "E1 (qualquer passo): falha de BD". Inclui validações, erros e mensagens ao usuário — é aqui que o UC brilha em relação ao RF.

PÓS
Pós-condição

Estado do sistema depois, em caso de sucesso. "Pedido salvo com status=PENDENTE", "Estoque decrementado". É também o que os testes de integração vão verificar.

REGRAS
Regras de Negócio + RNFs vinculadas

Lista dos IDs de RN-* e RNF-* que o UC precisa respeitar. É o que mantém a rastreabilidade entre o roteiro e os demais artefatos de requisitos.

✍️ Boas práticas de redação

Imperativo em cada passo. Comece com verbo + objeto. Um objetivo por UC. Se virou épico, quebre em UCs menores. Nada de UI. Não diga "clicar no botão azul" — diga "Confirmar envio". UI muda; intenção não.

11.2 Diagrama de Use Cases — a visão panorâmica

Antes de escrever cada UC em detalhe, um diagrama UML serve como mapa: quem são os atores, quais UCs existem, que relações há entre eles. Não é um diagrama técnico — é um acordo visual entre quem define o produto e quem o constrói. O diagrama da Loja Universitária abaixo mostra os elementos básicos que você vai usar.

Sistema · Loja Universitária Atendente Gerente UC-01 · Registrar Pedido UC-02 · Cancelar Pedido UC-03 · Consultar Estoque UC-04 · Gerar Relatório UC-05 · Autenticar «include»
👤 Ator

Papel externo que interage com o sistema. Não é pessoa específica — é função.

⬭ Elipse

Cada elipse = um caso de uso. Nome no formato verbo + objeto.

▭ Fronteira

O retângulo tracejado delimita o que é escopo do sistema. Atores ficam fora.

┄┄ «include»

UC-01 sempre executa UC-05 (autenticar). Reuso mandatório.

11.3 «include» vs «extend» — os dois tipos de reuso

No diagrama acima você viu uma seta tracejada com rótulo «include» ligando UC-01 e UC-05. UML define dois tipos de relação entre UCs — «include» e «extend» — e confundi-los é um dos erros mais comuns em diagramas mal escritos. A diferença é simples quando você pensa em termos de obrigatoriedade.

«include» Reuso obrigatório

UC-A sempre executa UC-B. Sem exceção.

UC-01 Registrar Pedido UC-05 Autenticar «include»
📖 "Para Registrar Pedido, o sistema sempre inclui Autenticar."

✅ Use quando: há um passo comum a vários UCs — autenticação, validação, auditoria, logging.

«extend» Reuso opcional

UC-B pode estender UC-A em condição específica.

UC-01 Registrar Pedido UC-06 Aplicar Cupom «extend» [cliente tem cupom válido]
📖 "Se o cliente tem cupom válido, Aplicar Cupom estende Registrar Pedido."

✅ Use quando: há comportamento extra que pode ou não acontecer — cupom, brinde, alerta de fraude, upsell.

Aspecto«include» — obrigatório«extend» — opcional
ExecuçãoSempre que UC-A rodaSó se a condição valer
Direção da setaUC base → UC incluídoUC extensão → UC base
O UC base sabe?Sim — referencia UC-B no fluxoNão — UC-A ignora UC-B
Exemplos reaisAutenticar · Validar CPF · Gerar logAplicar cupom · Alerta fraude · Upsell

11.4 Exemplo Completo — UC-01 Registrar Pedido

Aplicando o template da anatomia ao minimundo da Loja Universitária, o UC-01 fica como abaixo. Note como cada passo do fluxo principal é imperativo, como os desvios estão numerados e como a rastreabilidade aos RFs/RNs/RNFs aparece explicitamente no último bloco.

UC-ID: UC-01  ·  Nome: Registrar Pedido
Ator principal: Atendente  ·  Atores secundários: Sistema de Estoque
Pré-condições: Atendente autenticado (role=atendente) · Produto(s) existente(s) no catálogo
Fluxo Principal:
  1. Atendente inicia um novo pedido informando o cliente.
  2. Atendente adiciona ≥1 item (produto + quantidade).
  3. Sistema consulta o estoque de cada item («include» UC-03).
  4. Sistema calcula o total e apresenta resumo ao Atendente.
  5. Atendente confirma o pedido.
  6. Sistema persiste o pedido com status=PENDENTE e decrementa o estoque.
  7. Sistema retorna o id do pedido.
Fluxos Alternativos e Exceções:
  • A1 (passo 3): Estoque insuficiente → sistema exibe "Produto X indisponível" e retorna ao passo 2 para ajuste.
  • A2 (passo 5): Atendente cancela antes de confirmar → rascunho descartado, sem efeito no estoque.
  • E1 (qualquer passo): Falha de conexão com BD → sistema preserva rascunho local e exibe erro 503.
Pós-condição (sucesso): Pedido gravado com status=PENDENTE · estoque reduzido · evento PEDIDO_CRIADO emitido.
Regras / RNFs vinculadas:
RN-01 · estoque ≥ 0 RN-04 · preço congelado RNF-DES · p95 < 500ms RNF-SEG · role=atendente
🧪 Do UC para os testes

Cada fluxo vira um teste: POST /pedidos com itens válidos esperando 201 (fluxo principal); POST /pedidos com item sem estoque esperando 409 (A1); POST /pedidos sem token de atendente esperando 403 (pré-condição). Daí a regra: UC bem escrito = testes de integração quase prontos.

🚫 Sinais de UC mal escrito

Começa com "o usuário quer..." em vez de um passo imperativo. Mistura UI ("clicar no botão X"). Mais de um objetivo no mesmo UC. Sem pós-condição explícita. Sem rastreabilidade a RNs/RNFs. Fluxos alternativos ausentes — só o caminho feliz. Revisar todos esses pontos antes de marcar o UC como pronto.

12. RM-ODP — As 5 Visões do Sistema

O RM-ODP (Reference Model for Open Distributed Processing) foi padronizado conjuntamente pela ISO/IEC 10746 e pelo ITU-T X.901–X.904 no final dos anos 1990. Surgiu de uma necessidade concreta: nos anos 80–90, sistemas distribuídos estavam se multiplicando (CORBA, DCE, cliente-servidor corporativo), e cada fornecedor documentava seus sistemas de uma forma diferente. O RM-ODP propôs uma linguagem comum — 5 visões padronizadas — para descrever qualquer sistema distribuído de forma consistente.

Por que isso importa em IN02? Porque sistemas web são, por definição, sistemas distribuídos: cliente, servidor e banco rodam em processos separados, frequentemente em máquinas diferentes, e a aplicação só funciona quando as partes se comunicam corretamente. Descrever esse sistema a partir de uma única perspectiva (só o código, só o banco, só a interface) é incompleto — gera projetos com bugs arquiteturais que só aparecem em produção.

📌 A ideia central do RM-ODP

Nenhuma descrição única de um sistema distribuído é suficiente. Cada viewpoint é uma projeção do sistema que responde às perguntas de um tipo específico de stakeholder. O sistema real é a superposição coerente das 5 projeções — e inconsistências entre visões são defeitos que precisam ser resolvidos antes da implementação.

🏢
Enterprise (Empresarial)
Captura o propósito, escopo e política do sistema. Quem são os stakeholders? Qual é o objetivo de negócio? Quais são as regras e restrições organizacionais? Esta visão conecta o minimundo ao sistema.
Aula 1 — Minimundo, RF e RNF iniciais
📋
Information (Informação)
Descreve como a informação é estruturada, manipulada e trocada no sistema. Entidades, atributos, relacionamentos, invariantes de dados. Esta visão se traduz diretamente no modelo de banco de dados.
Aulas 2, 3, 4 — Modelagem ER, SQL, JOINs
⚙️
Computational (Computacional)
Descreve a decomposição funcional do sistema em componentes com interfaces bem definidas. Models, Controllers, Services, rotas — a arquitetura MVC. Cada componente tem operações e contratos.
Aulas 5, 6 — Back-end, MVC, Endpoints
🔧
Engineering (Engenharia)
Descreve como os componentes são distribuídos e se comunicam: nós, canais, protocolos, binding. O servidor roda em um processo Node.js, o banco em outro, o cliente no navegador — esta visão mapeia essas conexões.
Aulas 7, 8, 10 — Front-end, fetch, Testes
💻
Technology (Tecnologia)
Define as escolhas concretas de tecnologia: linguagens, frameworks, versões, padrões de interoperabilidade. Node.js 20, Express 4, PostgreSQL 16, Jest 29. A visão que conecta as especificações ao mundo real.
Aulas 9, 11 — CSS, Redes, Deploy

Ao longo do módulo, você vai revisitar essas visões a cada aula. O objetivo não é preencher formulários burocráticos — é desenvolver o hábito de pensar o sistema a partir de múltiplas perspectivas antes de escrever código.

O que cada visão produz — perguntas, artefatos e stakeholders

Cada viewpoint responde a um conjunto característico de perguntas e produz artefatos que são consumidos por um público específico. A tabela abaixo amarra tudo: pergunta central, artefato típico de sprint, stakeholders que validam e conexão com os eixos de RNF.

VisãoPergunta centralArtefato de sprintStakeholderEixos RNF relevantes
Enterprise Por que o sistema existe? Para quem? Minimundo, lista de RF, objetivos de negócio, políticas PO, cliente, usuário final USAB, ORG
Information Que informações o sistema armazena e manipula? Modelo ER, dicionário de dados, invariantes, regras de negócio (RN) Arquiteto de dados, DBA, especialista de domínio CAP, SEG (integridade), CONF
Computational Como o sistema é decomposto em componentes com contratos? Arquitetura MVC, contratos de API, diagramas de sequência Arquiteto de software, equipe de desenvolvimento SUP, DES, SEG (autorização)
Engineering Como os componentes se conectam em processos, nós e redes? Diagrama de deploy, protocolos, bindings, estratégia de rede DevOps, SRE, arquiteto de infraestrutura DES, CONF, CAP, SEG (em trânsito)
Technology Quais tecnologias, versões e padrões concretos são usados? Stack documentada, versões pinadas, padrões de interoperabilidade Tech lead, arquiteto, time técnico REST, SUP
⚠️ As 5 visões não são camadas

Um erro frequente é tratar RM-ODP como um diagrama em camadas (Enterprise em cima, Technology embaixo). Não é. As 5 visões são projeções ortogonais do mesmo sistema — cada uma enxerga o todo, mas filtrando pelos interesses daquela perspectiva. Você pode (e deve) começar por qualquer uma delas, desde que eventualmente todas estejam descritas e consistentes entre si.

12.1 RM-ODP Aplicado — Loja Universitária nas 5 Visões

Vamos aplicar as 5 visões ao minimundo da Loja Universitária da seção 10. O objetivo é mostrar que cada visão produz um artefato diferente do mesmo sistema, e que a coerência entre elas é o que permite começar a implementar com confiança.

🏢 Enterprise — propósito e escopo

Propósito: apoiar vendas balcão de uma loja de campus, reduzindo erros em estoque e dando visibilidade gerencial.
Atores: atendentes (operam pedidos), gerente (consulta relatórios), clientes (identificados por nome/e-mail).
Políticas: vendas só com estoque disponível; pedido cancelável em até 1 hora após criação; relatórios acessíveis só a gerentes.
Fora de escopo: pagamento online, entrega, nota fiscal.

📋 Information — entidades e invariantes

Entidades: Cliente, Produto, Pedido, ItemPedido, Usuario (atendente/gerente).
Invariantes (RN):
• RN-01: Produto.estoque_atual ≥ 0 sempre.
• RN-02: Pedido.status ∈ {pendente, confirmado, cancelado}.
• RN-03: ItemPedido.quantidade ≥ 1 e preço congelado no momento da compra.
• RN-04: Cliente.email único em toda a base.

⚙️ Computational — componentes e contratos

Controllers: PedidoController, ProdutoController, RelatorioController.
Services: EstoqueService (valida disponibilidade), PedidoService (cria, cancela), AuthService (login, roles).
Endpoints: POST /pedidos, PATCH /pedidos/:id/cancelar, GET /relatorios/vendas-diarias (role=gerente).
Contrato de erro: 409 Conflict quando estoque insuficiente; 403 quando role inválida.

🔧 Engineering — distribuição e comunicação

Nós: navegador (cliente), container Node.js (API), container PostgreSQL (dados).
Canais: HTTPS cliente↔API (JSON sobre HTTP/1.1), TCP API↔banco (protocolo PostgreSQL).
Bindings: JWT no header Authorization para auth; pool de conexões no banco (máx 20).
Falhas previstas: timeout de banco retorna 503 com Retry-After; erro de rede no cliente mostra toast e permite retry manual.

💻 Technology — stack concreta

Node.js 20 LTS · Express 4.18 · PostgreSQL 16 · pg 8.x como driver · jsonwebtoken 9 · bcrypt 5 · Jest 29 para testes · Docker Compose para ambiente local. Front-end em HTML/CSS/JS vanilla com fetch. Padrões: REST para API, ISO 8601 para datas, UTF-8 em toda a base.

✅ Como saber se as visões estão coerentes

Faça perguntas cruzadas entre visões. Exemplo: a RN-01 de Information ("estoque ≥ 0") aparece na Computational (validação no EstoqueService) e na Engineering (o banco retorna erro se constraint for violada)? Se sim, há rastreabilidade. Se não, há um buraco arquitetural — alguém vai implementar apenas no banco, ou apenas no service, e a regra não vai valer em todos os caminhos.

12.2 Comparação com Outros Frameworks de Arquitetura

RM-ODP não é o único framework que propõe múltiplas visões de um sistema. Conhecer os vizinhos ajuda a entender o que é específico do RM-ODP e quando outro framework pode ser mais adequado ao contexto.

FrameworkOrigemNº de visõesFoco principalQuando usar
RM-ODP ISO/IEC 10746 (1998) 5 (Enterprise, Information, Computational, Engineering, Technology) Sistemas distribuídos Projetos com forte componente de distribuição e heterogeneidade
4+1 View Model Kruchten / Rational (1995) 5 (Logical, Development, Process, Physical + Scenarios) Sistemas de software em geral Documentação com UML em torno de casos de uso
TOGAF (ADM) The Open Group (1995) 4 (Business, Data, Application, Technology) Arquitetura corporativa (enterprise architecture) Grandes organizações alinhando TI ao negócio
C4 Model Simon Brown (2011) 4 níveis (Context, Container, Component, Code) Zoom hierárquico, comunicação visual Documentar arquitetura de forma leve e incremental
arc42 Starke / Hruschka 12 seções (template) Estrutura pronta de documentação Equipes que querem um template pronto para arquitetura
📌 Qual framework escolher?

RM-ODP brilha quando há distribuição explícita e heterogeneidade de componentes. 4+1 brilha quando há forte uso de UML e casos de uso. TOGAF brilha em contexto corporativo. C4 brilha quando a documentação precisa ser comunicada visualmente e iterativamente. Nesta disciplina, usamos RM-ODP porque o módulo trata especificamente de sistemas web distribuídos — mas as mesmas ideias vão reaparecer em outros formatos ao longo do curso.

🔬 Aprofundamento: O conceito de viewpoint formal no RM-ODP

No RM-ODP formal, um viewpoint é mais do que uma "perspectiva" — é uma abstração que define um conjunto de conceitos, regras e linguagens apropriadas para tratar um grupo de preocupações. A norma ISO/IEC 10746-2 define as foundations (conceitos básicos), 10746-3 define a architecture (os 5 viewpoints), 10746-4 define o architectural semantics e 10746-5 define arquitetura de transparências (como esconder a distribuição do desenvolvedor de aplicação).

Cada viewpoint tem uma linguagem própria — um vocabulário de conceitos que você pode usar ao descrever o sistema naquela visão. Por exemplo, a linguagem da visão Information inclui objects, invariants, dynamic schemas. A linguagem da visão Engineering inclui capsules, nucleus, channels, stubs, binders. Em uso prático, você não precisa conhecer todos os conceitos formais — basta saber que cada visão fala uma linguagem diferente e que misturá-las indevidamente gera especificações confusas.

O RM-ODP também define transparências: propriedades que o sistema garante para o desenvolvedor de aplicação (acesso, localização, migração, replicação, falha, persistência, relocação, transação). Muitos frameworks modernos — Kubernetes, service mesh, ORMs — implementam essas transparências sem que o desenvolvedor saiba que existem como conceito formal.

13. Convergência RNF ↔ RM-ODP — A Matriz de Qualidade

RNF e RM-ODP parecem dois tópicos separados, mas se cruzam em todo projeto real. Cada eixo de RNF vive em uma ou mais visões do RM-ODP — e saber onde cada um vive é o que permite que o requisito seja implementável e não apenas declarado. Esta seção sistematiza essa ponte.

Onde cada eixo de RNF se manifesta nas 5 visões

Eixo RNFEnterpriseInformationComputationalEngineeringTechnology
USAB ✅ Público-alvo, jornada ✅ Contratos de UI, feedback ✅ Framework de UI
CONF ✅ SLAs de negócio ✅ Integridade, constraints ✅ Tratamento de erro ✅ Retry, circuit breaker ✅ Biblioteca de resiliência
DES ✅ Índices, normalização ✅ Algoritmos, caching ✅ Latência de rede ✅ Versão otimizada do runtime
SUP ✅ Arquitetura limpa, testes ✅ Observabilidade, logs ✅ Ferramentas de análise
SEG ✅ Política de acesso ✅ Dados sensíveis, LGPD ✅ AuthZ, validação ✅ TLS, firewall, WAF ✅ Libs de criptografia
CAP ✅ Projeção de crescimento ✅ Volume de dados, partições ✅ Escala horizontal ✅ Banco com sharding
REST ✅ Restrições corporativas ✅ Modelo de dados mandatório ✅ Stack obrigatória
ORG ✅ Prazo, orçamento, equipe
💡 Como ler esta matriz

Cada ✅ é um lugar onde o eixo precisa aparecer concretamente. Um RNF de Segurança não pode viver só em Enterprise ("o sistema é seguro") — precisa descer para Information (dados sensíveis identificados), Computational (rotas protegidas), Engineering (TLS no canal) e Technology (libs auditadas). Se alguma célula fica vazia sem justificativa, há risco de lacuna arquitetural.

Do minimundo ao artefato de sprint — fluxo unificado

  1. Minimundo → define escopo e atores (visão Enterprise).
  2. RF priorizados → derivados do minimundo, descrevem funcionalidades observáveis.
  3. RN numeradas → invariantes e restrições, vivem em Information.
  4. RNF por eixo → distribuídos nas 5 visões conforme a matriz acima.
  5. Matriz de rastreabilidade → cada RF aponta para ≥1 RN e ≥1 critério de aceite técnico.
  6. Artefato de entrega → o conjunto coerente: minimundo + RF + RN + RNF + matriz, com evidência de teste.
⚠️ Checagem de qualidade da entrega

Antes de submeter o artefato, responda:
1. Todo RF tem pelo menos um critério de aceite técnico?
2. Toda RN está numerada e é implementável/testável?
3. A matriz RF → RN cobre todos os fluxos priorizados, sem lacunas?
4. RNF foram escritos por eixo (não genéricos) e cobrem os eixos críticos do tipo de sistema?
5. Cada RNF crítico tem manifestação explícita em pelo menos 2 das 5 visões do RM-ODP?

14. Checklist de Estudo

Clique nos itens à medida que você dominar cada conceito:

  • Consigo explicar a diferença entre Internet e Web, e o que é um sistema web.
  • Consigo descrever o papel de cliente, servidor, banco e rede em uma arquitetura web.
  • Consigo desenhar o fluxo completo de uma requisição HTTP do usuário à resposta.
  • Consigo diferenciar GET, POST, PUT, PATCH e DELETE e saber quando usar cada um.
  • Consigo classificar status codes em 2xx, 3xx, 4xx e 5xx e citar exemplos de cada.
  • Consigo ler e escrever JSON com os 6 tipos de valor, incluindo objetos aninhados e arrays.
  • Consigo distinguir RF, RN e RNF e dar exemplos de cada um para um sistema real.
  • Consigo transformar "o sistema é rápido" em um RNF com eixo, métrica, carga e evidência.
  • Consigo nomear e descrever os 8 eixos de RNF usados na disciplina.
  • Consigo citar pelo menos 3 trade-offs clássicos entre eixos (ex: SEG × DES) e explicar em que ponto eles aparecem no código.
  • Consigo aplicar o esqueleto SMART-E para escrever um RNF auditável com eixo, condição, métrica, limiar, evidência e prazo.
  • Consigo priorizar eixos de RNF de acordo com o tipo de sistema (e-commerce, banco, interno, pipeline de dados).
  • Consigo redigir um minimundo sem misturar problema e solução técnica.
  • Consigo identificar as 5 visões do RM-ODP, a pergunta central de cada uma e o artefato que produzem.
  • Consigo aplicar as 5 visões a um minimundo concreto e verificar coerência cruzando informações entre elas.
  • Consigo comparar RM-ODP com 4+1, TOGAF e C4 e explicar quando usar cada um.
  • Consigo preencher a matriz de convergência RNF × RM-ODP para um projeto concreto e identificar lacunas.

Referências

Inteli Logo