What we do not flag¶
Este é o espaço negativo do catálogo: o que foi deliberadamente deixado de fora, e a razão. É a resposta de escopo e ameaças à validade, e a réplica canônica pro "por que X não é sinalizado". Cada entrada nomeia a razão real. Para os padrões que são cobertos, ver patterns by language and test level.
A assimetria é intencional: o catálogo prefere precisão (poucos falsos positivos) a recall. Um código rejeitado aqui não é esquecido; é uma decisão registrada. Reabrir um exige nova adjudicação, não inclusão unilateral.
The six reason categories¶
1. Belongs to the semantic skill, not static AST¶
Um AST decide estrutura, não intenção. Estes só viram S-codes ou um julgamento J2-J4, nunca um
C/JS/R:
- Mystery Guest completo (além do IP/URL fixo do
C23): nomear uma dependência externa oculta exige semântica. A fatia estática segura para noC23; o resto é da skill. - Eager Test (um teste exercitando muitas unidades): é design, não um false-green que um AST decide.
- Assert-the-mock profundo (o valor passa por uma indireção não-trivial antes de bater no
mock): o caso estático raso é
C13b/JS27/C11a; o profundo éS8/S16na skill. - Literal mágico como oráculo circular: vira o eixo semântico, não um
C-code.
2. Precision-first: the false-positive ceiling is too high¶
Um código que dispararia sobre código legítimo é pior que a ausência (um falso positivo custa mais que um miss). Rejeitados:
C8bno Robot (tolerância numérica aproximada): o texto não-tipado do Robot não dá sinal estático para dimensionar a tolerância. Skipped no Robot.- Global / shared state estático: detectar acoplamento de estado entre testes por AST produz
falsos positivos demais. Fica como
S13(skill) quando há evidência. - Resource Optimism além do
C23: assumir que um recurso existe. A fatia segura é oC23; ir além super-dispara. C2bdelegate-helper (single-file ceiling): quando a verificação mora num helper de outro arquivo que o scanner single-file não resolve, oC2bfica LOW e com ressalva, não promovido a HIGH.
3. Not a false-green: another smell axis (maintainability / duplication)¶
A tese é false-green: passar verde sem proteger nada. Smells de manutenção ficam OFF por padrão (diagnósticos):
- Clone / duplicação de teste: qualidade, não false-green. Não é código.
- Teste longo demais / fluxo de controle no teste:
M2e osD*são diagnósticos, OFF por padrão, território Robocop / tsDetect-maintainability. Ligam com--diagnostics.
4. Already covered by an existing code (a new code would double-report)¶
- Corpo inerte de
pytest.raises: sobrepõe oC51(raises vazio) ou exige a semântica doS17; um código novo criaria double-report ou uma máquina de falsos positivos. Rejeitado. - Smells de PyNose / pytest-smell / TEMPY (Py) e SNUTS.js / useless-test-detector / AromaDr (JS)
que mapeiam em
C/JSexistentes: Empty ->C2/C2b, Conditional ->C21/JS9, Exception ->C3/C17/C27/JS11/JS31, Sleepy ->C16, Redundant ->C5/C7/JS30, Skip ->C25/C32/C43/JS4/JS17, Suboptimal Assert ->C34, over-mock ->JS8. Não viram código novo.
5. The premise is factually wrong (not a false-green as stated)¶
- Robot
Run Keyword And Continue On Failurecomo "swallow": na verdade falha o teste no fim, não engole. O detector seria inútil ou incorreto. Rejeitado.
6. Deferred: real, but needs bounding / field validation before it enters¶
- Valor capturado nunca usado (caso amplo): só o canto AST-decidível entrou, como
C57(comparação contra atributo de Mock não configurado) e oC31do Robot (captura nunca referenciada). O resto (uso só em Log/Evaluate/teardown) precisa de bounding de falsos positivos, uma segunda passada. - Qualquer candidato novo de detector entra como PROVISIONAL e só é "estável" após field
validation num repo real.
C56/C57/C59passaram por isso (zero over-fire em 483 repos).
A note on method¶
Um código rejeitado é uma decisão, não um esquecimento. O catálogo se apoia na precisão: o verde que ele te dá significa algo porque a linha de escopo é desenhada de propósito e mantida. Para o quadro completo medido contra a literatura publicada de test-smell, ver scope and honesty e coverage versus the literature.