Capítulo 30 — Laboratório de verificação I
Mapa da aula
Aula 30 publicada. Mapa, exemplo, EX088.
flowchart TD
N0["30.1 Propósito da verificação"]
N1["30.2 Testes de autenticidade e de replay"]
N2["Laboratório — Verificação de autenticidade e de repl"]
N3["30.3 Registrar as evidências"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX088"]
Desenho lógico
flowchart LR
N0["30.1 Propósito da verificação"]
N1["30.2 Testes de autenticidade e de replay"]
N2["Laboratório — Verificação de autenticidade e de repl"]
N3["30.3 Registrar as evidências"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX088"]
[30.1 Propósito da verificação]
|
v
[30.2 Testes de autenticidade e de replay]
|
v
[Laboratório — Verificação de autenticidade e de repl]
|
v
[30.3 Registrar as evidências]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX088]
Objetivos de aprendizagem
Você vai (1) verificar se os controles implementados atendem às suas especificações; (2) rodar casos de teste positivos e negativos de autenticidade dos registros e de replay; (3) registrar as evidências de verificação.
30.1 Propósito da verificação
A verificação pergunta se o sistema foi construído conforme especificado. No Laboratório de Verificação I, Sofia testa os controles de autenticidade e de replay do componente de ingestão num laboratório isolado, com validadores sintéticos. Seu plano de testes vem diretamente das especificações dos controles: cada requisito tem testes positivos, que mostram o comportamento correto, e testes negativos, que mostram que entradas ruins são rejeitadas. O ambiente do laboratório usa apenas chaves e dados sintéticos. As evidências de verificação sustentarão o assurance case mais adiante, então cada teste registra as entradas, os resultados esperados, os resultados obtidos, a versão do ambiente e a data, num formato consistente.
30.2 Testes de autenticidade e de replay
No laboratório, os validadores autenticam os registros de validação com um código de autenticação de mensagem (MAC), usando uma chave compartilhada com a ingestão, um substituto simplificado das assinaturas de produção, implementado com o módulo hmac do Python. O script de Sofia envia quatro registros sintéticos: um registro novo e autêntico, uma duplicata dele, um registro com o valor alterado e um registro de um validador desativado cuja chave foi removida. O laboratório abaixo mostra a ingestão aceitando apenas o primeiro. Ela compara os resultados com os desfechos esperados e constata que os quatro coincidem. Uma divergência seria um defeito a ser relatado, e não um teste a ser ajustado.
Laboratório — Verificação de autenticidade e de replay
# Lab ingestion check: HMAC stand-in for validator signatures + replay store. Synthetic keys only.
import hmac, hashlib
keys = {"V-101": b"lab-key-101", "V-102": b"lab-key-102"} # V-099 retired: key removed
seen = set()
def tag(k, rec): return hmac.new(k, rec, hashlib.sha256).hexdigest()
def ingest(vid, rec, t):
k = keys.get(vid)
if k is None: return "reject: unknown or retired validator"
if not hmac.compare_digest(tag(k, rec), t): return "reject: bad tag"
rid = rec.split(b",")[0]
if (vid, rid) in seen: return "reject: replay"
seen.add((vid, rid)); return "accept"
r = b"R-5521,C100,2.40"
t = tag(keys["V-101"], r)
print("authentic:", ingest("V-101", r, t))
print("duplicate:", ingest("V-101", r, t))
print("altered amount:", ingest("V-101", b"R-5522,C100,0.10", tag(keys["V-101"], b"R-5522,C100,2.40")))
print("retired validator:", ingest("V-099", b"R-7,C200,2.40", tag(b"old-099", b"R-7,C200,2.40")))
Execute com python3 lab_ingest.py. Saída verificada:
authentic: accept
duplicate: reject: replay
altered amount: reject: bad tag
retired validator: reject: unknown or retired validator
30.3 Registrar as evidências
Sofia escreve um relatório de verificação com uma tabela de testes, resultados e links para as evidências, e anota o que não foi verificado: o desempenho sob a carga de pico, o comportamento durante o failover do banco de dados e o caminho das assinaturas de produção, que usa outro mecanismo. Ela assina e data o relatório e o guarda com um hash no repositório de evidências do projeto. Daniel lembra que a verificação mostra a conformidade com a especificação; se a própria especificação é adequada é uma questão separada, tratada pela validação, que vem mais adiante no curso.
Exemplo resolvido
Sofia roda quatro testes de autenticidade e de replay num laboratório isolado, constata que todos coincidem com o esperado e registra um relatório que lista três áreas ainda não verificadas.
Caso sintético. O laboratório, as chaves e os registros são sintéticos; o HMAC substitui as assinaturas de produção.
Erros e limites
Os ambientes de laboratório diferem da produção em escala e em tempo. Testes aprovados dependem da qualidade dos casos de teste.
Exercícios
-
EX088 — Pergunta da verificação. Que pergunta a verificação responde? Rubrica: 3 = o sistema foi construído conforme especificado;; 2 = conforme especificado;; 1 = é útil;; 0 = nenhuma.
-
EX089 — Resultados do laboratório. Quais dos quatro registros do laboratório foram aceitos? Rubrica: 3 = só o registro novo e autêntico; duplicado, alterado e desativado rejeitados;; 2 = só o primeiro;; 1 = vários;; 0 = nenhuma.
-
EX090 — Não verificado. Cite uma área que o relatório de Sofia lista como não verificada. Rubrica: 3 = carga de pico, failover do banco de dados ou caminho das assinaturas de produção;; 2 = uma;; 1 = vago;; 0 = nenhuma.
Síntese
A verificação testa os controles em relação às suas especificações com casos positivos e negativos e registra evidências honestas sobre o escopo.
Continue estudando — aula 30 (capítulo 30 de 50)
← Capítulo 29 · Índice das aulas · Capítulo 31 →
Continue para a próxima aula já escrita.