Mapa da aula
Aula 39 publicada. Mapa, exemplo, EX115.
flowchart TD
N0["39.1 Plano de avaliação final"]
N1["39.2 Testes independentes"]
N2["39.3 Usabilidade e efeitos colaterais"]
N3["39.4 Risco residual e recomendações"]
N4["39.4b Relato da avaliação"]
N5["39.6b Acordo prévio dos critérios do veredito"]
N6["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX115"]
Desenho lógico
flowchart LR
N0["39.1 Plano de avaliação final"]
N1["39.2 Testes independentes"]
N2["39.3 Usabilidade e efeitos colaterais"]
N3["39.4 Risco residual e recomendações"]
N4["39.4b Relato da avaliação"]
N5["39.6b Acordo prévio dos critérios do veredito"]
N6["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX115"]
[39.1 Plano de avaliação final]
|
v
[39.2 Testes independentes]
|
v
[39.3 Usabilidade e efeitos colaterais]
|
v
[39.4 Risco residual e recomendações]
|
v
[39.4b Relato da avaliação]
|
v
[39.6b Acordo prévio dos critérios do veredito]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX115]
Objetivos de aprendizagem
Você vai (1) avaliar o projeto final segundo seus critérios de aceitação; (2) incluir testes independentes e adaptativos; (3) avaliar a usabilidade e os efeitos colaterais; e (4) declarar os riscos residuais e as recomendações.
39.1 Plano de avaliação final
Use os critérios de aceitação da proposta, sem alterações, a menos que o registro de mudanças diga por quê. Execute as suítes reservadas completas, a suíte adaptativa independente e os testes de uso normal. Calcule as taxas com intervalos e compare-as com os critérios. O plano final de Rina usou os critérios de sua proposta: zero marcações entre pacientes, com limite superior abaixo de 0.5%, marcações concluídas de pelo menos 93% e o limiar de afirmações falsas. A única mudança registrada foi a retirada do canal de voz, aprovada antes. Executar as suítes completas uma única vez, numa configuração congelada, evitou a tentação de repetir até aparecer um resultado melhor.
39.2 Testes independentes
Peça a pessoas que não construíram o sistema que o ataquem dentro do escopo. Os resultados delas entram na avaliação mesmo quando são desfavoráveis. Os dois colegas de Rina já tinham escrito casos adaptativos durante o seminário; para a avaliação final, um terceiro testador, de outro curso, atacou o sistema durante dois dias. Esse testador encontrou o problema de cota em conversas longas, que ninguém envolvido na construção havia notado, porque suas conversas de teste eram curtas. Testadores novos trazem hábitos diferentes, e esses hábitos encontram falhas diferentes.
39.3 Usabilidade e efeitos colaterais
Meça a conclusão das tarefas, o tempo, as recusas indevidas e o retorno dos usuários. Controles de segurança que os usuários contornam ou abandonam não protegem ninguém. Rina mediu as marcações concluídas, o tempo médio para marcar e as recusas indevidas, e pediu a dez colegas que faziam o papel de pacientes uma breve opinião. O problema de cota apareceu nesse retorno como frustração, e não como falha de segurança. Um assistente de marcação que perde o contexto em conversas longas empurraria os pacientes de volta ao telefone, o que anula o propósito do serviço e aumenta a carga na recepção.
39.4 Risco residual e recomendações
Liste os riscos que permanecem, por que são aceitáveis ou não e que trabalho adicional os reduziria. Recomende se e como a abordagem deve ser adotada.
"""Lab S: reporting attack-success rates honestly: Wilson intervals,
seed variation and a paired bootstrap. Synthetic trial outcomes only."""
import math, random
def wilson(k, n, z=1.96):
p = k/n; d = 1 + z*z/n
c = (p + z*z/(2*n))/d; h = z*math.sqrt(p*(1-p)/n + z*z/(4*n*n))/d
return c - h, c + h
for k, n in ((3, 20), (30, 200), (300, 2000)):
lo, hi = wilson(k, n); print(f"successes={k}/{n} rate={k/n:.3f} wilson95=[{lo:.3f}, {hi:.3f}]")
# five seeds of a synthetic defence evaluation: per-seed attack success rate
rates = []
for seed in range(5):
r = random.Random(seed); rates.append(sum(r.random() < 0.12 for _ in range(200))/200)
m = sum(rates)/5; sd = math.sqrt(sum((x-m)**2 for x in rates)/4)
print("per-seed rates:", " ".join(f"{x:.3f}" for x in rates), f"mean={m:.3f} sd={sd:.3f}")
# paired bootstrap: baseline vs defence on the same 300 synthetic prompts
r = random.Random(42)
base = [r.random() < 0.30 for _ in range(300)]
defn = [b and r.random() < 0.6 for b in base] # defence blocks ~40% of successes
diffs = []
for _ in range(2000):
idx = [r.randrange(300) for _ in range(300)]
diffs.append(sum(base[i] for i in idx)/300 - sum(defn[i] for i in idx)/300)
diffs.sort()
print(f"baseline_asr={sum(base)/300:.3f} defended_asr={sum(defn)/300:.3f} "
f"reduction_ci95=[{diffs[50]:.3f}, {diffs[1949]:.3f}]")
Saída esperada:
successes=3/20 rate=0.150 wilson95=[0.052, 0.360]
successes=30/200 rate=0.150 wilson95=[0.107, 0.206]
successes=300/2000 rate=0.150 wilson95=[0.135, 0.166]
per-seed rates: 0.110 0.130 0.135 0.105 0.145 mean=0.125 sd=0.017
baseline_asr=0.350 defended_asr=0.190 reduction_ci95=[0.120, 0.203]
O laboratório mostra por que Rina relatou intervalos em vez de taxas isoladas: taxas idênticas de 0.150 trazem certezas muito diferentes com 20 e com 2000 tentativas. Sua lista de riscos residuais nomeou a injeção em idiomas que não o inglês e a dependência da revisão dos envios dos parceiros, explicou por que cada uma era aceitável para um piloto e propôs testes que as reduziriam antes de uma adoção mais ampla.
39.4b Relato da avaliação
Apresente uma tabela por critério, com resultado, intervalo, limiar e aprovação ou reprovação. Depois apresente os achados independentes, as medidas de usabilidade e uma breve discussão. Anexe os scripts de avaliação e as descrições das suítes de teste, para que um leitor possa repetir a execução. Relate um critério reprovado como reprovação, com sua causa e um plano, em vez de redefini-lo. A tabela de Rina para as marcações concluídas mostrou 94% contra o limiar de 93%, com seu intervalo. Como a margem era estreita, ela relatou a aprovação com essa ressalva, em vez de apresentá-la como folgada, e sugeriu que a LCH acompanhasse a taxa no piloto. O achado sobre a cota veio em seguida, na parte do relatório sobre os testes independentes.
39.5 Exemplo resolvido (caso sintético da LCH)
A avaliação final de Rina: 0 marcações entre pacientes em 1.000 tentativas (limite superior ≈ 0.4%); confirmações enganosas, 0 em 300 casos adaptativos; afirmações falsas sobre as clínicas, 2.4% (intervalo de 1.6–3.5%), abaixo do critério de 4%; marcações concluídas, 94%. Os testadores independentes encontraram um problema: conversas muito longas atingiam a cota de tokens e perdiam o contexto, frustrando os usuários. Riscos residuais: injeção em idiomas que não o inglês não testada; dependência da revisão dos envios dos parceiros. Recomendação: adotar na LCH o serviço de políticas e a confirmação estruturada; estender os testes a outros idiomas. O problema de cota foi relatado como achado de usabilidade, com uma correção proposta: aumentar a cota para pacientes autenticados.
39.6 Erros e limites
Três erros são comuns: mudar os critérios depois dos resultados; omitir resultados independentes desfavoráveis; e ignorar a usabilidade. Mudar o limiar de afirmações falsas depois de ver os resultados teria tornado a aprovação sem sentido, então Rina manteve o original. Omitir o problema de cota porque veio de um testador independente esconderia a principal fraqueza de usabilidade. Ignorar a usabilidade teria produzido um sistema aprovado nos testes de segurança enquanto os pacientes desistiam dele e telefonavam para a clínica. Relatar os três, inclusive os desfavoráveis, mantém a avaliação honesta e útil para a LCH.
39.6b Acordo prévio dos critérios do veredito
Os critérios de aprovação do projeto final — por exemplo, sucesso de injeção abaixo de uma taxa acordada num conjunto reservado de ataques, sem aumento das marcações erradas — são fixados antes da avaliação final. Se os resultados ficarem entre limiares, o relatório o diz claramente, em vez de arredondar na direção do sucesso. Os critérios de Rina foram assinados por seu orientador antes da execução final, então não podiam derivar. Assiná-los primeiro significou que, quando as marcações concluídas ficaram perto do limiar, ninguém pôde discutir o que contava como aprovação. O examinador conferiu a data da assinatura com a data da execução final.
Exercícios
- EX115 — Critérios. Confira os resultados de Rina com seus critérios e diga quais foram aprovados. Rubrica: 3 = todos os critérios declarados avaliados corretamente; 2 = a maioria; 1 = vago; 0 = nenhum.
- EX116 — Problema de usabilidade. Como tratar o problema de cota? Rubrica: 3 = relatá-lo, ajustar a cota/resumir o contexto, testar de novo, equilibrar com o risco de custo; 2 = parcial; 1 = ignorar; 0 = nenhum.
- EX117 — Risco residual. Escreva uma declaração de risco residual com justificativa e próximo passo. Rubrica: 3 = risco, por que é aceitável ou não, próximo passo; 2 = dois; 1 = vago; 0 = nenhuma.
Síntese
A avaliação do projeto final é uma medição honesta segundo critérios fixados antes, incluindo ataques independentes e usabilidade, e termina com riscos residuais e recomendações claros.
Continue estudando — capítulo 39 de 40
← Capítulo 38 (rascunho) · Índice de capítulos do curso · Capítulo 40 (rascunho) →