prompts-unificando 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/prompts/testes.md +85 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prompts-unificando",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Biblioteca de prompts padronizados para auditoria, refatoração, testes, segurança/LGPD e revisão de copy, agnóstica de stack e de LLM.",
5
5
  "bin": {
6
6
  "prompts-unificando": "bin/cli.js"
package/prompts/testes.md CHANGED
@@ -30,6 +30,10 @@ Também inclui um **modo projeto extenso**: para bases de código grandes (múlt
30
30
  - 🌳 Árvore de branches completa antes de testar
31
31
  - 🔺 Pirâmide de testes (Unit ~70-80% / Integration ~15-25% / E2E ~3-5%)
32
32
  - 🎯 7 Princípios ISTQB aplicados
33
+ - ✅ Critério F.I.R.S.T. por teste: Rápido, Isolado, Repetível, Autoverificável, Leve de escrever
34
+ - 🧩 Duplos de teste corretos — stub (dados), mock (verifica interação), fake (alternativa funcional)
35
+ - 🧼 Teste limpo: entrada mínima, constante nomeada, 1 Act por teste, sem lógica no corpo
36
+ - 🔒 Determinismo: clock/random via seam; privados testados via público
33
37
  - 📊 Relatório de rastreabilidade teste → regra
34
38
 
35
39
  ---
@@ -187,10 +191,12 @@ no test-plan.md, e siga direto pra reconciliação/testes desta mesma fase.
187
191
 
188
192
  ETAPA 2: APLICAR PIRÂMIDE DE TESTES (COM PERCENTUAL)
189
193
  Depois de confirmado o business-rules.md, classifique cada regra/branch:
190
- - Unitário (~70-80%): lógica pura, sem I/O, sem dependência externa. Mock tudo. Rápido.
194
+ - Unitário (~70-80%): lógica pura, sem I/O, sem dependência externa. Substitua dependências por
195
+ duplos de teste (stub/fake/mock conforme o papel — ver Etapa 3.5). Rápido.
191
196
  - Integração (~15-25%): interação real com BD, cache, fila, API externa. Um componente por vez.
192
197
  - E2E (~3-5%): fluxo completo do usuário end-to-end. Só os críticos.
193
- Classifique cada teste antes de gerar o código. Nada de E2E fingindo ser unitário.
198
+ Classifique cada teste antes de gerar o código. Nada de E2E fingindo ser unitário. Se um teste
199
+ unitário precisa de BD, arquivo, rede ou clock reais, ele é integração — mova de camada.
194
200
 
195
201
  ETAPA 3: 7 PRINCÍPIOS ISTQB + OPERACIONALIZAÇÃO
196
202
  1. Teste mostra presença de defeitos, não ausência: tente QUEBRAR a regra, não confirmar que está tudo bem.
@@ -201,6 +207,64 @@ ETAPA 3: 7 PRINCÍPIOS ISTQB + OPERACIONALIZAÇÃO
201
207
  6. Teste depende do contexto: regra financeira/jurídica → precisão + auditoria + rollback; UI → usabilidade + acessibilidade; performance → tempo de execução + memória.
202
208
  7. Ausência de erro ≠ sucesso: valide contra a regra descrita em business-rules.md, não contra o comportamento atual do código. Se o código tiver bug, o teste NÃO valida o bug — valida a regra correta.
203
209
 
210
+ ETAPA 3.5: QUALIDADE E REDAÇÃO DE CADA TESTE (F.I.R.S.T.)
211
+ Critério obrigatório para TODO teste gerado (unitário, integração ou E2E):
212
+
213
+ F.I.R.S.T. — cada teste deve ser:
214
+ - Rápido: executa em milissegundos
215
+ - Isolado: autônomo, sem depender de ordem de execução nem de outros testes
216
+ - Repetível/determinístico: mesmo resultado sempre; nada de depender de clock, random ou ambiente
217
+ - Autoverificável: assert real que falha sozinho, sem interpretação humana
218
+ - Leve de escrever: se testar exige esforço desproporcional ao código, é sinal de design pouco
219
+ testável — anote no relatório em vez de forçar um teste contorcido
220
+
221
+ Sem infraestrutura em teste unitário: teste unitário não toca BD, sistema de arquivos, rede,
222
+ fila ou clock reais — isso pertence à integração. Encapsule fontes não-determinísticas
223
+ (DateTime.Now/UtcNow, Random, gerador de ID) atrás de interface no código de produção
224
+ (ex: IClock, IDateTimeProvider) e faça stub no teste: o teste controla o valor, não o ambiente.
225
+
226
+ Duplos de teste (stub vs mock vs fake):
227
+ - Stub: substituição controlada que SÓ fornece dados/respostas — não decide a aprovação
228
+ - Mock: duplo usado no Assert para VERIFICAR interação (ex: "método foi chamado com X")
229
+ - Fake: implementação alternativa funcional (ex: repositório em memória)
230
+ Use a terminologia correta — chamar stub de mock confunde intenção e leva a over-mock. Só use
231
+ mock quando o comportamento sob teste É a interação; para o resto, stub/fake com dados fixos.
232
+ Teste que quebra por mock de interação desnecessário está errado.
233
+
234
+ Regras de redação (anti-padrões proibidos):
235
+ 1. Entrada mínima: use o menor input que exerce o comportamento sob teste. Objetos inchados e
236
+ campos irrelevantes preenchidos só desfocam a intenção e aumentam a fragilidade.
237
+ 2. Sem cadeias mágicas: literal solto sem contexto vira constante nomeada com intenção
238
+ (ex: MAX_BALANCE, EXPIRED_TOKEN). Valor estranho num teste sem nome é bug em potencial.
239
+ 3. Sem lógica no corpo do teste: proibido if/for/while/switch/concatenação para montar
240
+ expectativa. Bug no teste é o pior lugar para um bug. Prefira parametrização da framework
241
+ (parametrize/test.each/InlineData): mesma Act, entradas em tabela.
242
+ 4. Uma Act por teste + uma asserção lógica por método: uma única ação sendo verificada. Várias
243
+ Acts mascaradas no mesmo teste escondem qual falhou e um Assert pode abortar as demais. Várias
244
+ asserções sobre o MESMO comportamento são aceitáveis; asserções de comportamentos DIFERENTES vão
245
+ para testes separados (ou parametrizados). Mesmo cenário com várias entradas → teste parametrizado.
246
+ 5. Helper/factory em vez de Setup/Teardown: crie CreateX()/buildX() que devolvem o objeto no
247
+ estado desejado DENTRO de cada teste. Setup global força o mesmo preparo para todos os testes
248
+ (inchados, estado compartilhado, over-setup/under-setup). Com helper, o que cada teste precisa
249
+ está visível localmente.
250
+ 6. Métodos privados VIA métodos públicos: nunca teste privado diretamente (nem via reflection ou
251
+ InternalsVisibleTo). Privado é detalhe de implementação; o que importa é o resultado final do
252
+ método público que o invoca. Testar privado prende o teste à implementação.
253
+ 7. Nomenclatura em 3 partes: [Unidade]_[Cenário]_[ComportamentoEsperado] — ex:
254
+ Withdraw_BalanceMinusFeeNegative_RejectsWithdrawal. Estilo should_* (ex:
255
+ should_deny_withdrawal_when_balance_minus_fee_is_negative) é aceito DESDE QUE contenha as
256
+ 3 partes, sempre em inglês (reforça a Etapa 4).
257
+ 8. Não duplicar lógica de implementação no teste: nunca recalcule no teste o que o código de
258
+ produção calcula (ex.: em vez de refazer um `sum()` com split/map/reduce, use o valor esperado
259
+ fixo/constante). Se a mesma lógica com o mesmo erro existir nos dois lugares, o teste passa
260
+ validando o bug. Use valores esperados explícitos e constantes — nunca "re-implementação" da
261
+ regra dentro do teste.
262
+ 9. Não acoplar o teste a detalhes de implementação: o teste continua válido mesmo se o código for
263
+ refatorado internamente, desde que o comportamento público não mude. Proibido depender de
264
+ internals (estrutura interna, ordem de chamadas não contratual, nomes internos, estado privado).
265
+ Se um teste quebra por mudança de implementação SEM mudança de comportamento, o teste está
266
+ errado — ajuste o teste, não o código.
267
+
204
268
  ETAPA 4: GERAÇÃO DE TESTES
205
269
  Quando o business-rules.md for confirmado, gere os testes.
206
270
 
@@ -209,8 +273,10 @@ Errado: test_saque_1, deve_negar_saque_quando_saldo_insuficiente
209
273
  Certo: should_deny_withdrawal_when_balance_minus_fee_is_negative, should_return_401_when_token_is_expired
210
274
  Nome = regra de negócio testada, em inglês. Implementação é detalhe.
211
275
 
212
- Estrutura padrão de cada teste: Arrange (prepara estado/mocks/dados) → Act (executa a ação) →
213
- Assert (valida resultado contra regra em business-rules.md).
276
+ Estrutura padrão de cada teste: Arrange (prepara estado/dados/duplos) → Act (executa a ação) →
277
+ Assert (valida resultado contra regra em business-rules.md). Aplicar a Etapa 3.5 em todo teste
278
+ gerado: F.I.R.S.T. + duplos corretos + regras de redação (entrada mínima, sem mágica, sem lógica,
279
+ uma Act, helper/factory, privados via público, nome em 3 partes).
214
280
 
215
281
  Use a sintaxe/framework de teste já existente no projeto (identificado na Etapa 0). Não introduza uma
216
282
  nova ferramenta de teste sem perguntar.
@@ -231,8 +297,10 @@ REGRAS INVIOLÁVEIS:
231
297
  1. Não invente regras — sempre baseado no código real do diretório + mapeamento.
232
298
  2. Não assuma em silêncio — ambiguidade → anotação + confirmação.
233
299
  3. Não gere teste antes de regras estarem confirmadas. Gate claro.
234
- 4. 100% significa 100% — não 80%, não "cobertura boa o suficiente". Todas as linhas, todos os
235
- branches, todos os casos de borda.
300
+ 4. O alvo são os comportamentos, regras e branches mapeados em business-rules.md — cada um com
301
+ teste deliberado. Percentual de linha é referência de progresso, não meta: trecho de
302
+ baixíssimo risco pode ir para "Casos Não Cobertos" (5.4) com justificativa. NUNCA crie teste
303
+ artificial só para subir métrica.
236
304
  5. Teste != validação de bug — se código está errado e teste valida o erro, o teste está errado.
237
305
  6. Não quebre o fluxo — não gere código, prompt ou estrutura que não foi pedida.
238
306
  7. Formato fixo — business-rules.md, test-report.md, código de teste. Nada mais, nada menos.
@@ -251,6 +319,14 @@ REGRAS INVIOLÁVEIS:
251
319
  14. Em projeto extenso, o test-plan.md é atualizado a cada fase concluída, em tempo real.
252
320
  15. Em projeto extenso, não pare entre fases pra pedir permissão. A entrada no modo já é a autorização.
253
321
  Só pare no final (todas as fases concluídas) ou diante de um bloqueio objetivo (Etapa 0.5.3).
322
+ 16. Todo teste é F.I.R.S.T. (rápido, isolado, repetível, autoverificável, leve de escrever).
323
+ Dependência de infra real (BD, arquivo, rede, clock) em teste unitário = teste na camada errada.
324
+ 17. Proibido testar método privado diretamente (reflection incluso) — teste via método público
325
+ que o invoca.
326
+ 18. Duplos: stub/fake para fornecer dados; mock SOMENTE quando o comportamento é a interação.
327
+ Over-mock que quebra por detalhe de implementação é teste errado.
328
+ 19. Proibido lógica no corpo do teste (if/for/while/switch para montar expectativa) — parametrize.
329
+ Cadeias mágicas viram constantes nomeadas. Entrada mínima sempre. Uma Act por teste.
254
330
 
255
331
  FLUXO DE EXECUÇÃO:
256
332
 
@@ -262,7 +338,8 @@ Modo Padrão (projeto pequeno/médio):
262
338
  5. Releia o business-rules.md (não o código de novo) e reconcilie com testes existentes: mantém,
263
339
  corrige, renomeia ou remove — mostre o resumo
264
340
  6. PARE — aguarde confirmação da reconciliação antes de editar arquivo de teste
265
- 7. Gere/atualize testes com 100% cobertura, nomes em inglês, na convenção já usada pelo projeto
341
+ 7. Gere/atualize testes com cobertura dos comportamentos mapeados, nomes em inglês, na convenção
342
+ já usada pelo projeto e com qualidade da Etapa 3.5 (F.I.R.S.T.)
266
343
  8. Gere test-report.md com rastreabilidade + Pareto + suposições confirmadas + reconciliação
267
344
  9. Pronto — sem commit, sem push, apenas os arquivos gerados/atualizados
268
345
 
@@ -270,7 +347,7 @@ Modo Projeto Extenso (Etapa 0.5 ativada):
270
347
  1. Escaneie o diretório, identifique linguagem/stack/framework
271
348
  2. Avalie o escopo → detecte que é extenso → gere test-plan.md com as fases
272
349
  3. Para cada fase, sem parar entre elas: mapeie regras → reconcilie testes existentes → gere/atualize
273
- testes → atualize test-plan.md marcando a fase como concluída
350
+ testes com qualidade da Etapa 3.5 (F.I.R.S.T.) → atualize test-plan.md marcando a fase como concluída
274
351
  4. Repita até todas as fases estarem concluídas
275
352
  5. Só então pare, apresentando o test-report.md consolidado (todas as fases) + test-plan.md 100%
276
353
  concluído