Capítulo 3 — Fundamentos de programação
Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX007.
flowchart TD
N0["3.1 Por que tecnólogos programam"]
N1["3.2 Uma função, uma decisão"]
N2["3.3 Biblioteca padrão primeiro"]
N3["3.4 Falhar fechado"]
N4["3.5 Testes como evidência"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX007"]
Desenho lógico
flowchart LR
N0["3.1 Por que tecnólogos programam"]
N1["3.2 Uma função, uma decisão"]
N2["3.3 Biblioteca padrão primeiro"]
N3["3.4 Falhar fechado"]
N4["3.5 Testes como evidência"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX007"]
[3.1 Por que tecnólogos programam]
|
v
[3.2 Uma função, uma decisão]
|
v
[3.3 Biblioteca padrão primeiro]
|
v
[3.4 Falhar fechado]
|
v
[3.5 Testes como evidência]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX007]
Objetivos de aprendizagem
Você vai (1) escrever funções Python pequenas e legíveis, cada uma tomando uma decisão; (2) usar apenas a biblioteca padrão, para que um laboratório rode em qualquer estação de trabalho aprovada; (3) testar uma função com entradas conhecidas antes de confiar nela; (4) explicar por que as ferramentas de avaliação devem falhar fechadas.
3.1 Por que tecnólogos programam
O trabalho de avaliação produz listas: hosts, contas, achados, itens de evidência, datas de reteste. Scripts que verificam, ordenam e resumem essas listas eliminam erros de cópia e tornam as decisões repetíveis. Não são ferramentas de ataque. Neste livro, todo script lê dados inventados guardados no próprio arquivo e imprime um veredicto. Priya automatiza as listas de hosts e de achados para que as pessoas gastem tempo com os HOLDs e a severidade, e não copiando linhas. Scripts que classificam escopo e calculam hashes de evidência estão dentro dos limites; scripts que inventam caminhos de ataque, não. O registro do operador do ENG-712 é gerado apenas a partir de ações que passaram pelo controle.
3.2 Uma função, uma decisão
Uma função como verdict(addr), do Capítulo 2, responde a uma pergunta e devolve um pequeno conjunto de rótulos. Esse desenho a torna testável: alimente-a com um endereço cuja resposta você já conhece e compare. Quando uma função decide, imprime e grava arquivos ao mesmo tempo, um defeito numa parte se esconde nas outras. verdict(addr) devolve IN-SCOPE, EXCLUDED ou OUT-OF-SCOPE e nada mais. Essa decisão única passa por testes unitários com 192.0.2.10, 192.0.2.70 e 192.0.2.200 antes de toda janela. Uma função auxiliar que também edita o inventário que lê é reprovada na revisão de código da TRT, porque deixa de responder a uma única decisão e um defeito na edição se esconderia no veredicto.
3.3 Biblioteca padrão primeiro
A biblioteca padrão do Python inclui ipaddress, datetime, hashlib, json, csv e collections. Eles cobrem aritmética de escopo, janelas de tempo, hash de evidências, registros estruturados e contagens. Evitar pacotes de terceiros significa não ter revisão de dependências, não ter surpresas na cadeia de suprimentos e ter comportamento idêntico na máquina do revisor. ipaddress, datetime, hashlib e json cobrem os laboratórios didáticos do ENG-712 sem scanners de terceiros. Priya fixa a escolha da biblioteca padrão no inventário do kit, para que as discussões sobre cadeia de suprimentos tratem das ferramentas da TRT, e não de pacotes aleatórios do PyPI baixados no meio da janela. Se a Northpoint trouxer depois um scanner comercial, essa ferramenta ganha linha própria, responsável e nota de tratamento de dados.
3.4 Falhar fechado
Se um arquivo de escopo estiver ausente ou uma data não puder ser interpretada, o padrão seguro é "não prosseguir". Um verificador que devolve "permitido" ao encontrar uma exceção é pior do que nenhum, porque cria falsa confiança. Escreva primeiro o caminho de negação e depois acrescente as condições de permissão. Arquivos de escopo ausentes fazem o verificador falhar fechado em "não prosseguir". Devolver permitido numa exceção teria liberado 192.0.2.200 numa leitura quebrada. Os testes de Priya verificam o caminho fechado com uma fixture de arquivo apagado: remover o arquivo de escopo na integração contínua (CI) precisa resultar em não prosseguir, nunca em permitido. A fixture fica ao lado da tabela de testes do ENG-712 para que os auditores possam executar de novo o caminho fechado.
3.5 Testes como evidência
Uma tabela curta de entradas e saídas esperadas, executada antes de cada engajamento, é evidência de que as ferramentas se comportam. Guarde-a junto dos registros do engajamento para que um revisor possa executá-la de novo. A tabela de testes pré-engajamento de verdict() é arquivada no ENG-712 ao lado das ROE. Quando a Northpoint pergunta se a ferramenta mudou, Priya mostra a tabela executada na abertura, e não a lembrança de uma saída verde. Como a execução é anexada ao chamado antes de as ferramentas começarem, ninguém pode alegar depois que o verificador "provavelmente estava bem" sem apresentar esse artefato.
Exemplo resolvido
Priya escreve uma função auxiliar que devolve "allowed" apenas quando uma string de data é interpretada e cai dentro da janela. Seu primeiro rascunho capturava ValueError e devolvia "allowed". Ela a reescreve para que a exceção devolva "STOP: unreadable time" e acrescenta três casos conhecidos — dentro, fora, malformado — a uma lista de testes executada antes do trabalho de cada noite.
Caso sintético. A função auxiliar de Priya e suas entradas de teste foram inventadas para fins didáticos.
Erros e limites
Trechos copiados de fóruns podem esconder chamadas de rede ou padrões inseguros; leia cada linha. Habilidade em programação não cria permissão para testar nada.
Exercícios
- EX007 — Padrão na exceção. Um parser recebe "2026-11-31 23:00" (uma data inválida). O que um verificador de janela que falha fechado deve devolver? Rubrica: 3 = um rótulo de parada/negação e o motivo, nunca "allowed"; 2 = nega sem motivo; 1 = allowed; 0 = nada.
- EX008 — Escolha da biblioteca. Nomeie o módulo da biblioteca padrão que você usaria para calcular digests SHA-256 e um motivo para preferi-lo a um pacote de terceiros. Rubrica: 3 = hashlib + nenhuma dependência extra/revisão de cadeia de suprimentos/mesmo comportamento para o revisor; 2 = só o módulo; 1 = terceiros; 0 = nada.
- EX009 — Tabela de respostas conhecidas. Dê três entradas de teste, com as saídas esperadas, para a função
verdictdo Capítulo 2. Rubrica: 3 = três pares corretos cobrindo IN-SCOPE, EXCLUDED e OUT-OF-SCOPE; 2 = dois corretos; 1 = um; 0 = nada.
Síntese
Funções pequenas, biblioteca padrão, negar por padrão e uma tabela de respostas conhecidas guardada como evidência.
Continue estudando — capítulo 03 de 30
← Capítulo 02 (rascunho) · Índice de capítulos do curso · Capítulo 04 (rascunho) →