Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX007.
flowchart TD
N0["3.1 Por que tecnólogos escrevem scripts"]
N1["3.2 Somente leitura por padrão"]
N2["3.3 Saída clara"]
N3["3.4 Biblioteca padrão primeiro"]
N4["3.5 Controle de versão"]
N5["3.6 Testes"]
N6["3.7 Comentários"]
N7["Calculando o hash de um arquivo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX007"]
Desenho lógico
flowchart LR
N0["3.1 Por que tecnólogos escrevem scripts"]
N1["3.2 Somente leitura por padrão"]
N2["3.3 Saída clara"]
N3["3.4 Biblioteca padrão primeiro"]
N4["3.5 Controle de versão"]
N5["3.6 Testes"]
N6["3.7 Comentários"]
N7["Calculando o hash de um arquivo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX007"]
[3.1 Por que tecnólogos escrevem scripts]
|
v
[3.2 Somente leitura por padrão]
|
v
[3.3 Saída clara]
|
v
[3.4 Biblioteca padrão primeiro]
|
v
[3.5 Controle de versão]
|
v
[3.6 Testes]
|
v
[3.7 Comentários]
|
v
[Calculando o hash de um arquivo]
|
v
[Exemplo resolvido] --> [Exercício EX007]
Objetivos de aprendizagem
Você vai (1) escrever pequenos scripts em Python com segurança; (2) ler arquivos sem modificá-los; (3) imprimir saídas claras e verificáveis; (4) usar controle de versão para scripts usados em investigações.
3.1 Por que tecnólogos escrevem scripts
Investigações repetem tarefas: calcular o hash de muitos arquivos, filtrar logs, comparar listas. Scripts tornam o trabalho mais rápido e repetível, mas só se estiverem corretos e registrados. A repetibilidade importa sobretudo quando alguém contesta um resultado. Se Jonah calcula à mão o hash de duzentos arquivos e comete um erro de digitação, ninguém consegue dizer qual resumo está errado. Um script executado duas vezes sobre a mesma entrada dá a mesma saída, e um revisor pode ler exatamente o que ele fez. O custo é que um script errado erra todas as vezes, por isso o teste vem primeiro.
3.2 Somente leitura por padrão
Abra os arquivos de evidência no modo de leitura binária ("rb"). Grave as saídas numa pasta separada. Nunca "conserte" um arquivo de evidência. O modo binário também evita a tradução de quebras de linha em alguns sistemas, que alteraria os bytes vistos pela função de hash. Jonah mantém a evidência numa pasta e as saídas em outra, e nunca aponta o caminho de saída de um script para a pasta de evidências. Se um script precisa criar arquivos temporários, eles também vão para a pasta de saída, para que a cópia da evidência continue exatamente como foi recebida.
3.3 Saída clara
Imprima o que foi processado, quantos itens e quaisquer erros. Um script silencioso, que não imprime nada quando falha, é perigoso. O script de listagem melhorado de Jonah mostra a forma: ele informa quantos arquivos listou, quantos não conseguiu abrir e o caminho de cada falha. Assim, quem lê pode conferir os totais com a pasta e ver na hora se algo ficou de fora. Um script que relata sucesso sem contagens não dá nenhum meio de perceber que metade da pasta foi pulada.
3.4 Biblioteca padrão primeiro
A biblioteca padrão do Python cobre hashing (hashlib), CSV (csv), JSON (json), datas (datetime), expressões regulares (re) e manipulação de arquivos (os, pathlib). Usá-la evita instalar pacotes extras em máquinas sensíveis. Numa estação de trabalho da prefeitura ou numa máquina de evidências, instalar pacotes significa baixar código de fora, o que altera o sistema e acrescenta software cujo comportamento não foi revisado. A função de hash de Jonah usa apenas hashlib e lê os arquivos em blocos, por isso roda em qualquer máquina com Python 3 e dá resultados que outro analista pode reproduzir sem um conjunto igual de pacotes.
3.5 Controle de versão
Os scripts ficam num repositório; cada mudança tem uma mensagem. Os relatórios citam a versão usada. Para Jonah, isso significa que cada script usado num caso é registrado num commit antes de ser executado, e o identificador do commit é anotado nas notas do caso ao lado da saída. Se o script mudar depois, qualquer pessoa pode voltar à versão exata que produziu um achado. Um script passado adiante por e-mail ou editado no lugar não deixa registro do que de fato rodou. Renata também pede, em cada commit, uma mensagem curta que diga por que a mudança foi feita.
3.6 Testes
Execute os scripts sobre entradas sintéticas com respostas conhecidas antes de usá-los em dados do caso. A função de hash de Jonah foi conferida com uma segunda ferramenta em cinco arquivos sintéticos e num arquivo vazio, e os arquivos e os resumos esperados foram guardados no repositório. O arquivo vazio é um caso-limite proposital: ele revela erros no modo como uma função lida com a leitura de zero bytes. Os testes são executados de novo após cada mudança, para que uma edição posterior não quebre um resultado em silêncio. Um teste que passa em dados sintéticos mostra que o script funciona como pretendido; não mostra que a evidência está completa.
3.7 Comentários
Um comentário curto explica o porquê, não o quê: "o modo binário evita a tradução de quebras de linha". Bons comentários registram decisões que um leitor poderia questionar: por que um arquivo é lido em blocos, por que uma falha é registrada em vez de levantar uma exceção, por que um campo é tratado como UTC. Renata revisa os scripts de Jonah lendo primeiro os comentários; onde falta um comentário, ela faz a pergunta que ele deveria ter respondido, e a resposta vira o comentário. Comentários que só repetem o código não acrescentam nada e ficam desatualizados quando o código muda.
Calculando o hash de um arquivo
Uma função curta abre um arquivo no modo binário, lê seu conteúdo em blocos para hashlib.sha256() e devolve o resumo em hexadecimal. Jonah a testa contra uma segunda ferramenta em cinco arquivos sintéticos e num arquivo vazio, confirmando resultados idênticos antes de usá-la. Ele guarda os arquivos de teste e os resumos esperados no repositório para que qualquer pessoa possa refazer a conferência depois de mudanças. Quando um colega edita a função mais tarde, o teste guardado mostra imediatamente se os resultados ainda conferem.
Exemplo resolvido
O primeiro script de Jonah lista os arquivos de uma pasta com seus tamanhos. Renata pergunta o que acontece se um arquivo não puder ser aberto. O script quebra. Ele acrescenta um tratamento de erro que registra "permission denied: caminho" e continua, e depois imprime os totais: 211 listados, 1 erro.
Caso sintético. A pasta é inventada.
Erros e limites
Um script reflete as suposições de quem o escreveu; a revisão por pares pega as suposições que o autor não consegue ver.
Exercícios
- EX007 — Modo de leitura. Em que modo os arquivos de evidência devem ser abertos, e por quê?
Mostrar critérios de avaliação
Rubrica: 3 = leitura binária somente "rb"; sem alterações, sem tradução; 2 = parcial; 1 = escrita; 0 = nada. - EX008 — Falha silenciosa. Por que um script silencioso é perigoso?
Mostrar critérios de avaliação
Rubrica: 3 = as falhas passam despercebidas; resultados incompletos são tomados como confiáveis; 2 = parcial; 1 = não há problema; 0 = nada. - EX009 — Tratamento de erros. O que o script melhorado de Jonah fazia diante de um arquivo ilegível?
Mostrar critérios de avaliação
Rubrica: 3 = registrava o erro, continuava, imprimia os totais 211/1; 2 = parcial; 1 = quebrava; 0 = nada.
Síntese
Scripts somente leitura, verbosos, testados e versionados são ferramentas investigativas seguras.
Continue estudando — capítulo 03 de 30
← Capítulo 02 (rascunho) · Índice de capítulos do curso · Capítulo 04 (rascunho) →