◇ OpenCyber Academy
Mestrado · Capítulo 5 · Português

Capítulo 5 — Projeto e piloto

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 5 — Projeto e piloto

Mapa da aula

Aula 05 publicada. Mapa, exemplo, EX027.

flowchart TD
  N0["5.1 Finalidade do piloto"]
  N1["5.2 O laboratório de duplicatas"]
  N2["5.3 Tempos de correção"]
  N3["5.4 Refinando o projeto"]
  N4["Laboratório — Endereços duplicados antes e depois da"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX027"]

Desenho lógico

flowchart LR
  N0["5.1 Finalidade do piloto"]
  N1["5.2 O laboratório de duplicatas"]
  N2["5.3 Tempos de correção"]
  N3["5.4 Refinando o projeto"]
  N4["Laboratório — Endereços duplicados antes e depois da"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX027"]
[5.1 Finalidade do piloto]
    |
    v
[5.2 O laboratório de duplicatas]
    |
    v
[5.3 Tempos de correção]
    |
    v
[5.4 Refinando o projeto]
    |
    v
[Laboratório — Endereços duplicados antes e depois da]
    |
    v
[Exemplo resolvido] --> [Exercício EX027]

Objetivos de aprendizagem

Você vai (1) testar em piloto a medição de duplicatas e de tempos de correção; (2) normalizar dados de endereço; (3) refinar o projeto com as lições do piloto.

5.1 Finalidade do piloto

Antes da coleta principal, Tomás testa suas medições em uma réplica sintética dos cadastros de endereços. Ele quer saber se as duplicatas podem ser contadas de forma confiável, se os tempos de correção podem ser extraídos dos registros de chamados e quanto tempo leva cada etapa. Um piloto não serve para responder à pergunta de pesquisa; ele testa se os métodos funcionam. A Dra. Solberg lembra que problemas encontrados em um piloto custam pouco, enquanto os mesmos problemas encontrados durante o estudo principal podem custar meses.

5.2 O laboratório de duplicatas

O laboratório do piloto gera 3.305 registros sintéticos de endereço, nos quais um segundo departamento às vezes digita o mesmo endereço com abreviações, espaços extras e letras maiúsculas diferentes. A correspondência exata não encontra nenhuma duplicata, porque não há duas cadeias de texto idênticas. Depois da normalização — que converte o texto para minúsculas, expande abreviações como St e Rd e reduz espaços repetidos —, aparecem 384 duplicatas, 11,6% dos registros. O resultado mostra que qualquer medida de duplicidade depende fortemente das regras de normalização escolhidas, que são, elas mesmas, uma decisão de governança. As regras de abreviação decidem o que conta como o mesmo endereço.

5.3 Tempos de correção

Os registros de chamados indicam quando um erro foi notificado e quando o chamado foi encerrado, mas o encerramento nem sempre significa que o endereço mudou em todos os sistemas. Na réplica, alguns chamados são encerrados quando o departamento que notificou corrige a própria cópia, enquanto os outros departamentos continuam com o dado errado. Tomás redefine o desfecho como os dias até que o endereço corrigido apareça nos cinco sistemas, o que corresponde à experiência dos moradores. A ênfase da ISO 8000-1 em requisitos o ajuda a justificar a mudança: o requisito é um endereço correto em toda parte, não um chamado encerrado.

5.4 Refinando o projeto

Com base no piloto, Tomás atualiza o projeto: a contagem de duplicatas usará regras de normalização documentadas e acordadas com os curadores, o tempo de correção será medido até o último sistema atualizado e a extração de dados levará duas semanas, e não uma. Ele registra as mudanças e seus motivos no diário de decisões antes de coletar os dados reais de desfecho, para que as mudanças não possam ser acusadas de perseguir resultados. A Dra. Solberg aprova e observa que o piloto já produziu um achado sobre como as definições moldam a qualidade medida.

Laboratório — Endereços duplicados antes e depois da normalização

"""Find duplicate address records before and after normalisation in a synthetic council register (stdlib only)."""
import random, re, collections
random.seed(12)
streets = ["High Street", "Mill Lane", "Church Road", "Station Road", "Park Avenue", "Kings Way"]
base = [(random.randint(1, 120), random.choice(streets), f"AR{random.randint(1,9)} {random.randint(1,9)}QX") for _ in range(3000)]
base = list(dict.fromkeys(base))
recs = []
for n, s, p in base:
    recs.append(f"{n} {s}, {p}")
    if random.random() < 0.12:   # a second department keys the same address differently
        v = s.replace("Street", "St").replace("Road", "Rd").replace("Avenue", "Ave")
        recs.append(f"{n}  {v.upper()},{p.lower()}")
def norm(a):
    a = a.lower().replace(",", " ")
    for k, v in {" st ": " street ", " rd ": " road ", " ave ": " avenue "}.items():
        a = (" " + a + " ").replace(k, v).strip()
    return re.sub(r"\s+", " ", a)
exact = len(recs) - len(set(recs))
normd = len(recs) - len({norm(r) for r in recs})
print(f"records {len(recs)}; exact duplicates {exact}; duplicates after normalisation {normd} ({100*normd/len(recs):.1f}%)")

Execute com python3 lab_dupes.py. Saída verificada:

records 3305; exact duplicates 0; duplicates after normalisation 384 (11.6%)

Exemplo resolvido

Tomás não encontra duplicatas exatas, mas encontra 384 (11,6%) depois da normalização entre 3.305 registros sintéticos, redefine o tempo de correção até o último sistema atualizado e registra as mudanças no projeto antes da coleta principal.

Caso sintético. Os registros são sintéticos; a ISO 8000-1:2022 é real.

Erros e limites

Uma normalização agressiva pode fundir endereços diferentes; confira uma amostra manualmente.

Exercícios

Continue estudando — aula 05 (capítulo 05 de 08)

← Capítulo 04 · Índice das aulas · Capítulo 06 →

Continue para a próxima aula já escrita.