Capítulo 7 — Síntese da tese e arquivo de reprodutibilidade
Mapa da aula
Aula 07 publicada. Mapa, exemplo, EX039.
flowchart TD
N0["7.1 Estrutura da tese"]
N1["7.2 O arquivo de reprodutibilidade"]
N2["Laboratório — verificação do manifesto"]
N3["7.3 Lendo o resultado"]
N4["7.4 Por que manifestos de hash"]
N5["7.5 Imagens ou gerador"]
N6["7.6 Licenças"]
N7["7.7 Teste de reprodução"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX039"]
Desenho lógico
flowchart LR
N0["7.1 Estrutura da tese"]
N1["7.2 O arquivo de reprodutibilidade"]
N2["Laboratório — verificação do manifesto"]
N3["7.3 Lendo o resultado"]
N4["7.4 Por que manifestos de hash"]
N5["7.5 Imagens ou gerador"]
N6["7.6 Licenças"]
N7["7.7 Teste de reprodução"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX039"]
[7.1 Estrutura da tese]
|
v
[7.2 O arquivo de reprodutibilidade]
|
v
[Laboratório — verificação do manifesto]
|
v
[7.3 Lendo o resultado]
|
v
[7.4 Por que manifestos de hash]
|
v
[7.5 Imagens ou gerador]
|
v
[7.6 Licenças]
|
v
[7.7 Teste de reprodução]
|
v
[Exemplo resolvido] --> [Exercício EX039]
Objetivos de aprendizagem
Você vai (1) estruturar uma tese de doutorado em perícia digital; (2) construir um arquivo de reprodutibilidade; (3) verificar a integridade do arquivo com hashes; (4) documentar o que outras pessoas precisam para refazer o trabalho.
7.1 Estrutura da tese
Introdução; fundamentação (sistemas de arquivos segundo Carrier, carving, normas de validação); projeto do gerador; piloto; estudo principal; validação por um segundo laboratório; discussão; limitações; conclusão; apêndices com manifestos e registros. A ordem espelha o raciocínio do estudo: o gerador precisa ser descrito antes que o piloto possa ser julgado, e o piloto antes do estudo principal. O capítulo de limitações lista a natureza sintética das imagens, a família única de arquivos e o método único executado no estudo principal. Os apêndices permitem que um examinador confira qualquer valor contra os registros brutos sem contatar Ines.
7.2 O arquivo de reprodutibilidade
Dados (as imagens ou o gerador mais as sementes), código (gerador, carvers, pontuador), ambiente (versões fixadas), resultados e um README que descreve como reproduzir cada tabela. Cada arquivo de resultado tem uma entrada SHA-256 num manifesto no topo do arquivo de reprodutibilidade. O README lista os comandos em ordem e a saída esperada de cada um, para que o leitor perceba imediatamente se sua execução reproduziu a tabela ou divergiu. Ines também informa o tamanho do próprio arquivo de reprodutibilidade e o tempo que uma execução completa leva num notebook comum.
Laboratório — verificação do manifesto
"""Lab (ch 07): SHA-256 manifest for a reproducibility archive, then verify a copy with one altered file."""
import hashlib
orig = {"data/img-contig.bin": b"synthetic-image-1", "data/img-frag10.bin": b"synthetic-image-2",
"code/carve.py": b"print('carve')", "results/recall.csv": b"img,recall\ncontig,0.96\n"}
manifest = {p: hashlib.sha256(b).hexdigest() for p, b in orig.items()}
copy = dict(orig); copy["results/recall.csv"] = b"img,recall\ncontig,0.98\n"
for p in sorted(manifest):
ok = hashlib.sha256(copy[p]).hexdigest() == manifest[p]
print(p, "OK" if ok else "MISMATCH")
print("archive verified" if all(hashlib.sha256(copy[p]).hexdigest() == h for p, h in manifest.items()) else "archive FAILED verification")
Execute com python3 lab_manifest.py. Saída verificada:
code/carve.py OK
data/img-contig.bin OK
data/img-frag10.bin OK
results/recall.csv MISMATCH
archive FAILED verification
7.3 Lendo o resultado
Três dos quatro arquivos da cópia do arquivo de reprodutibilidade correspondem às suas entradas no manifesto SHA-256. results/recall.csv não corresponde: seu valor de revocação mudou de 0,96 para 0,98. A verificação falha, exatamente como deve falhar quando qualquer resultado é alterado após a publicação. O laboratório demonstra, portanto, a conferência de propósito: um único dígito alterado basta para quebrar o manifesto. Ines executa a mesma verificação em seu arquivo de reprodutibilidade real antes da submissão, e a tese declara que todas as entradas conferiam naquela data. Como a falha nomeia results/recall.csv, Ines sabe qual tabela regenerar.
7.4 Por que manifestos de hash
O mesmo princípio protege as evidências: a ISO/IEC 27037 enfatiza preservar a integridade desde a aquisição, o que costuma ser demonstrado registrando valores de hash. Aplicá-lo a arquivos de pesquisa permite que os examinadores confiem que os resultados publicados são os que a tese relata. O próprio manifesto faz parte do apêndice da tese, de modo que alterar ao mesmo tempo um resultado e seu hash exigiria mudar também a tese depositada. Ines também registra a data em que o manifesto foi produzido e a tag do código que produziu os resultados que ele lista.
7.5 Imagens ou gerador
Publicar o gerador e as sementes ocupa menos espaço do que publicar as imagens e permite que outros as regenerem exatamente; Ines também publica uma imagem de amostra para conferências rápidas. A imagem de amostra permite que o leitor confira o carver rapidamente sem executar o gerador, e seu hash está no manifesto. Se alguma vez uma imagem regenerada diferir da amostra publicada, a diferença mostra que alguma parte do ambiente mudou, como aconteceu com a versão do Python durante a nova execução do segundo laboratório. Um leitor que regenere todos os 150 arquivos-alvo precisa apenas da lista de sementes e do gerador.
7.6 Licenças
Código sob licença aberta; texto sob os termos da universidade; nenhum dado de terceiros com termos restritivos. Ines conferiu a licença de cada dependência antes da liberação. Como seus laboratórios usam apenas a biblioteca padrão do Python, nenhuma licença de pacote externo se aplica ao código. O README declara a licença de cada parte do arquivo de reprodutibilidade, para que um laboratório possa reutilizar o gerador em seu próprio trabalho de validação sem pedir permissão, e a tese cita o texto da licença com um link. O escritório do repositório da universidade confirmou que depositar o arquivo de reprodutibilidade não conflita com seus termos.
7.7 Teste de reprodução
Antes da submissão, um colega segue o README numa máquina limpa e regenera todas as tabelas. O colega nunca viu o código e é orientado a não contatar Ines a menos que fique bloqueado. Cada ponto em que precisou adivinhar é tratado como uma falha do README e corrigido, e o teste é repetido até passar sem nenhuma pergunta. O relatório dele, com a data e a tag do arquivo de reprodutibilidade testado, é arquivado com a tese. O erro de caminho do notebook encontrado durante esse teste é citado como exemplo de por que a etapa vale o tempo que custa.
Registros e cadernos
Os registros de análise anotam cada execução com data, semente, versão do código e hash da saída. Os examinadores podem rastrear qualquer valor da tese até a execução exata que o produziu.
Exemplo resolvido
O teste de reprodução falha numa tabela porque um script lia um caminho de arquivo específico do notebook de Ines. Ela o substitui por um caminho relativo, executa de novo, atualiza o manifesto e registra a correção.
Caso sintético. O arquivo de reprodutibilidade é inventado.
Erros e limites
Um hash prova integridade, não correção; um resultado errado pode ser preservado fielmente.
Exercícios
- EX039 — Falha do manifesto. Qual arquivo falhou na verificação, e por quê? Rubrica: 3 = results/recall.csv; valor mudou de 0,96→0,98; 2 = só o arquivo; 1 = errado; 0 = nada.
- EX040 — Conteúdo do arquivo de reprodutibilidade. Liste cinco componentes do arquivo de reprodutibilidade. Rubrica: 3 = dados/gerador+sementes, código, ambiente, resultados, README; 2 = três; 1 = um; 0 = nada.
- EX041 — Paralelo com evidências. Como o manifesto se relaciona com o tratamento de evidências? Rubrica: 3 = integridade por hashes, como na preservação da ISO/IEC 27037; 2 = parcial; 1 = vago; 0 = nada.
- EX042 — Gerador em vez de imagens. Por que publicar o gerador e as sementes em vez de apenas as imagens? Rubrica: 3 = menor; regeneração exata; 2 = um; 1 = sem razão; 0 = nada.
- EX043 — Defeito de caminho. O que quebrou o teste de reprodução, e como foi corrigido? Rubrica: 3 = caminho absoluto do notebook; caminho relativo, manifesto atualizado; 2 = um; 1 = vago; 0 = nada.
- EX044 — Integridade vs. correção. O que um hash coincidente não prova? Rubrica: 3 = que os resultados estão corretos; 2 = parcial; 1 = prova tudo; 0 = nada.
Síntese
Estruture a tese com clareza, arquive tudo o que é necessário para refazê-la, verifique com hashes e teste a reprodução numa máquina limpa.
Continue estudando — capítulo 07 de 08
← Capítulo 06 (rascunho) · Índice de capítulos do curso · Capítulo 08 (rascunho) →