◇ OpenCyber Academy
Pesquisa doutoral · Capítulo 1 · Português

Capítulo 1 — Integridade e métodos avançados de pesquisa

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 1 — Integridade e métodos avançados de pesquisa

Mapa da aula

Aula 01 publicada. Mapa, exemplo, EX001.

flowchart TD
  N0["1.1 A doutoranda e a pergunta"]
  N1["1.2 Por que é difícil testar afirmações sobre arquit"]
  N2["1.3 Métodos que separam as rivais"]
  N3["1.4 Regras de integridade antes dos dados"]
  N4["1.5 Codificação com concordância medida"]
  N5["Laboratório — Concordância entre codificadores na cl"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX001"]

Desenho lógico

flowchart LR
  N0["1.1 A doutoranda e a pergunta"]
  N1["1.2 Por que é difícil testar afirmações sobre arquit"]
  N2["1.3 Métodos que separam as rivais"]
  N3["1.4 Regras de integridade antes dos dados"]
  N4["1.5 Codificação com concordância medida"]
  N5["Laboratório — Concordância entre codificadores na cl"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX001"]
[1.1 A doutoranda e a pergunta]
    |
    v
[1.2 Por que é difícil testar afirmações sobre arquit]
    |
    v
[1.3 Métodos que separam as rivais]
    |
    v
[1.4 Regras de integridade antes dos dados]
    |
    v
[1.5 Codificação com concordância medida]
    |
    v
[Laboratório — Concordância entre codificadores na cl]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX001]

Objetivos de aprendizagem

Você vai (1) formular uma pergunta de pesquisa falseável sobre uma prática de arquitetura; (2) escolher métodos capazes de distinguir a resposta de suas explicações rivais; (3) fixar regras de integridade para dados, parceiros e autoria antes de existir qualquer dado; (4) construir um esquema de codificação com concordância medida.

1.1 A doutoranda e a pergunta

Amara Lind é doutoranda no fictício Halden Institute of Technology, sob orientação do Prof. Rafael Quintero. Sua organização parceira é o fictício Tessaro Insurance Group, que mantém trinta equipes de produto construindo sistemas de sinistros, de apólices e de corretores. Todas as pessoas, organizações e números deste livro são sintéticos. A pergunta de Amara é se uma etapa estruturada de threat modeling na revisão de design, usando STRIDE como descrito por Shostack (2014), reduz a taxa de defeitos de segurança no nível da arquitetura encontrados após o lançamento, em comparação com a revisão de design sem essa etapa. A pergunta é falseável: um estudo bem conduzido poderia mostrar nenhuma redução, e ela se compromete de antemão a relatar esse resultado.

1.2 Por que é difícil testar afirmações sobre arquitetura

Herley e van Oorschot (2017) argumentam que boa parte do que se escreve sobre segurança faz afirmações que não podem ser refutadas, como dizer que uma prática melhora a segurança sem dizer que observação mostraria que ela não melhora. A arquitetura é especialmente exposta a esse problema, porque os resultados chegam tarde, os defeitos são raros e muitas práticas mudam ao mesmo tempo. Amara responde nomeando um desfecho mensurável, defeitos de arquitetura por cem mudanças de design encontrados nos doze meses após o lançamento, e nomeando de antemão as explicações rivais: maturidade da equipe, idade do sistema, regressão à média depois de anos ruins e mudanças na forma de reportar os defeitos.

1.3 Métodos que separam as rivais

Amara compara três desenhos. Uma comparação de antes e depois dentro das equipes que adotam a prática não consegue separar a prática da melhora geral ao longo do tempo. Um ensaio aleatorizado entre equipes seria o mais forte, mas a Tessaro não pode sortear quais equipes adotam, porque a adoção segue os ciclos orçamentários. Ela escolhe um desenho de adoção escalonada com equipes de comparação e uma análise de diferença em diferenças, seguindo a lógica de Wohlin et al. (2012) para experimentos em engenharia de software, e pré-registra o desfecho principal, as covariáveis e as regras de parada. Ela escreve que padrões de resultado apoiariam cada explicação rival, para que a análise possa testá-las, em vez de descartá-las com explicações depois.

1.4 Regras de integridade antes dos dados

Antes de coletar qualquer coisa, Amara acorda regras de integridade com a Tessaro e com seu comitê de ética. Os registros de defeitos são pseudonimizados, para que nenhum engenheiro possa ser identificado ou culpado. A Tessaro pode revisar os rascunhos em busca de detalhes confidenciais, mas não pode vetar os achados. O código, os manuais de codificação e réplicas sintéticas dos dados serão arquivados, enquanto os registros reais ficam com a Tessaro. A autoria segue a contribuição, e o assistente de codificação que classifica os defeitos será reconhecido. Ela registra essas regras com data e um hash do documento no seu caderno de laboratório, para que os leitores possam ver depois que elas não foram ajustadas quando os resultados já eram conhecidos.

1.5 Codificação com concordância medida

Classificar um defeito como de arquitetura ou de implementação é um julgamento, por isso Amara escreve um manual de codificação com definições e exemplos. Um defeito de arquitetura é aquele cuja correção exige mudar uma fronteira de confiança, a responsabilidade de um componente ou um fluxo de dados; um defeito de implementação pode ser corrigido dentro de um único componente. Ela e um segundo codificador classificam de forma independente um conjunto piloto e calculam o kappa de Cohen, interpretando-o com as faixas cautelosas de Landis e Koch (1977). O laboratório abaixo calcula o kappa sobre quarenta defeitos piloto sintéticos. Um valor baixo significaria que a medida de desfecho não é confiável e que o manual precisa de revisão antes que qualquer comparação faça sentido.

Laboratório — Concordância entre codificadores na classe do defeito

# Cohen's kappa for two coders classifying 40 synthetic defects (A=architecture, I=implementation).
c1 = "AAAAAAAAAAAAAAAAIIIIIIIIIIIIIIIIIIIIIIII"
c2 = "AAAAAAAAAAAAAAIIIIAIIIIIIIIIIIIIIIIIIAII"
n = len(c1); po = sum(a == b for a, b in zip(c1, c2)) / n
pe = sum((c1.count(k) / n) * (c2.count(k) / n) for k in "AI")
print(f"items={n} observed agreement={po:.3f} expected={pe:.3f} kappa={(po - pe) / (1 - pe):.2f}")

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

items=40 observed agreement=0.900 expected=0.520 kappa=0.79

Exemplo resolvido

Amara escreve a pergunta falseável com seu desfecho e quatro rivais, escolhe a adoção escalonada com diferença em diferenças, data e calcula o hash das suas regras de integridade e chega a um kappa de 0,79 na codificação piloto.

Caso sintético. O Halden Institute, o Tessaro Insurance Group, Amara, Rafael e todos os dados são inventados; Shostack (2014), Herley e van Oorschot (2017), Wohlin et al. (2012) e Landis e Koch (1977) são reais.

Erros e limites

O kappa depende da prevalência das classes e pode enganar quando uma classe domina. O pré-registro restringe a análise, mas não garante uma coleta de dados honesta.

Exercícios

Síntese

A pesquisa de doutorado em arquitetura começa com uma pergunta falseável, um desenho capaz de separar as explicações rivais, regras de integridade fixadas de antemão e uma medida de resultado confiável.

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

← Início do curso · Índice das aulas · Capítulo 02 →

Continue para a próxima aula já escrita.