@maestro-ai/mcp-server 1.2.0 → 2.1.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.
- package/README.md +26 -31
- package/dist/content/rules/GEMINI.md +79 -27
- package/dist/content/rules/RULES.md +6 -0
- package/dist/content/skills/specialist-acessibilidade/MCP_INTEGRATION.md +698 -0
- package/dist/content/skills/specialist-acessibilidade/README.md +292 -0
- package/dist/content/skills/specialist-acessibilidade/SKILL.md +202 -0
- package/dist/content/skills/specialist-acessibilidade/mcp_functions/init_accessibility_audit.py +675 -0
- package/dist/content/skills/specialist-acessibilidade/mcp_functions/validate_wcag_compliance.py +587 -0
- package/dist/content/skills/specialist-acessibilidade/resources/checklists/accessibility-validation.md +457 -0
- package/dist/content/skills/specialist-acessibilidade/resources/examples/accessibility-examples.md +863 -0
- package/dist/content/skills/specialist-acessibilidade/resources/reference/wcag-guide.md +359 -0
- package/dist/content/skills/specialist-acessibilidade/resources/templates/checklist-acessibilidade.md +435 -0
- package/dist/content/skills/specialist-acessibilidade/resources/templates/relatorio-acessibilidade.md +490 -0
- package/dist/content/skills/specialist-analise-testes/MCP_INTEGRATION.md +569 -0
- package/dist/content/skills/specialist-analise-testes/README.md +42 -0
- package/dist/content/skills/specialist-analise-testes/SKILL.md +258 -0
- package/dist/content/skills/specialist-analise-testes/mcp_functions/README.md +794 -0
- package/dist/content/skills/specialist-analise-testes/resources/checklists/testing-validation.md +305 -0
- package/dist/content/skills/specialist-analise-testes/resources/examples/testing-examples.md +395 -0
- package/dist/content/skills/specialist-analise-testes/resources/reference/testing-guide.md +1024 -0
- package/dist/content/skills/specialist-arquitetura-avancada/MCP_INTEGRATION.md +440 -0
- package/dist/content/skills/specialist-arquitetura-avancada/README.md +298 -0
- package/dist/content/skills/specialist-arquitetura-avancada/SKILL.md +295 -0
- package/dist/content/skills/specialist-arquitetura-avancada/mcp_functions/README.md +573 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/checklists/architecture-validation.md +385 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/examples/architecture-examples.md +743 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/reference/architecture-guide.md +680 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/bounded-context.md +333 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/cqrs-implementation.md +495 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/event-sourcing.md +571 -0
- package/dist/content/skills/specialist-arquitetura-avancada/resources/templates/microservices-strategy.md +647 -0
- package/dist/content/skills/specialist-arquitetura-software/MCP_INTEGRATION.md +483 -0
- package/dist/content/skills/specialist-arquitetura-software/README.md +306 -0
- package/dist/content/skills/specialist-arquitetura-software/SKILL.md +194 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/init_architecture.py +137 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/process_architecture.py +279 -0
- package/dist/content/skills/specialist-arquitetura-software/mcp_functions/validate_architecture.py +302 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/checklists/architecture-validation.md +180 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/examples/architecture-examples.md +239 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/reference/architecture-guide.md +489 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/adr.md +61 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/arquitetura.md +192 -0
- package/dist/content/skills/specialist-arquitetura-software/resources/templates/slo-sli.md +153 -0
- package/dist/content/skills/specialist-banco-dados/MCP_INTEGRATION.md +390 -0
- package/dist/content/skills/specialist-banco-dados/README.md +323 -0
- package/dist/content/skills/specialist-banco-dados/SKILL.md +221 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/init_database.py +720 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/process_database.py +386 -0
- package/dist/content/skills/specialist-banco-dados/mcp_functions/validate_database.py +551 -0
- package/dist/content/skills/specialist-banco-dados/resources/checklists/database-validation.md +434 -0
- package/dist/content/skills/specialist-banco-dados/resources/examples/database-examples.md +857 -0
- package/dist/content/skills/specialist-banco-dados/resources/reference/database-guide.md +708 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/constraints.md +935 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/design-banco.md +509 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/indices.md +553 -0
- package/dist/content/skills/specialist-banco-dados/resources/templates/migracoes.md +777 -0
- package/dist/content/skills/specialist-contrato-api/MCP_INTEGRATION.md +152 -0
- package/dist/content/skills/specialist-contrato-api/README.md +183 -0
- package/dist/content/skills/specialist-contrato-api/SKILL.md +317 -0
- package/dist/content/skills/specialist-contrato-api/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-contrato-api/resources/checklists/api-validation.md +44 -0
- package/dist/content/skills/specialist-contrato-api/resources/examples/api-examples.md +137 -0
- package/dist/content/skills/specialist-contrato-api/resources/reference/api-guide.md +96 -0
- package/dist/content/skills/specialist-contrato-api/resources/templates/contrato-api.md +165 -0
- package/dist/content/skills/specialist-dados-analytics-ia/MCP_INTEGRATION.md +398 -0
- package/dist/content/skills/specialist-dados-analytics-ia/README.md +224 -0
- package/dist/content/skills/specialist-dados-analytics-ia/SKILL.md +160 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/generate_insights_dashboard.py +669 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/init_analytics_pipeline.py +626 -0
- package/dist/content/skills/specialist-dados-analytics-ia/mcp_functions/validate_analytics_quality.py +772 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/checklists/analytics-validation.md +519 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/examples/analytics-examples.md +646 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/reference/analytics-guide.md +1111 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/feature.md +419 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/requisitos.md +384 -0
- package/dist/content/skills/specialist-dados-analytics-ia/resources/templates/slo-sli.md +381 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/MCP_INTEGRATION.md +340 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/README.md +218 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/SKILL.md +194 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/checklists/debugging-validation.md +319 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/examples/debugging-examples.md +480 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/prompts/analise-bugs.md +527 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/reference/debugging-guide.md +392 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/templates/bug-report.md +192 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/resources/templates/post-mortem.md +241 -0
- package/dist/content/skills/specialist-debugging-troubleshooting/scripts/README.md +64 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/MCP_INTEGRATION.md +98 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/README.md +167 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/SKILL.md +288 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/checklists/backend-validation.md +44 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/examples/backend-examples.md +109 -0
- package/dist/content/skills/specialist-desenvolvimento-backend/resources/reference/backend-guide.md +86 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/MCP_INTEGRATION.md +914 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/README.md +261 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/SKILL.md +220 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/init_frontend.py +861 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/process_frontend.py +1003 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/mcp_functions/validate_frontend.py +766 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/checklists/frontend-validation.md +365 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/examples/frontend-examples.md +1125 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/reference/frontend-guide.md +1055 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/component-story.md +530 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/historia-frontend.md +243 -0
- package/dist/content/skills/specialist-desenvolvimento-frontend/resources/templates/ui-guidelines.md +725 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/MCP_INTEGRATION.md +87 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/README.md +149 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/SKILL.md +360 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/mcp_functions/README.md +17 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/checklists/mobile-validation.md +330 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/examples/mobile-examples.md +966 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/android-guide.md +546 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/flutter-guide.md +500 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/ios-guide.md +518 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/mobile-guide.md +76 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/reference/react-native-guide.md +659 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/historia-mobile.md +284 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/mobile-checklist.md +239 -0
- package/dist/content/skills/specialist-desenvolvimento-mobile/resources/templates/platform-selection.md +302 -0
- package/dist/content/skills/specialist-devops-infra/MCP_INTEGRATION.md +471 -0
- package/dist/content/skills/specialist-devops-infra/README.md +234 -0
- package/dist/content/skills/specialist-devops-infra/SKILL.md +162 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/generate_ci_cd_pipeline.py +870 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/init_infrastructure_structure.py +704 -0
- package/dist/content/skills/specialist-devops-infra/mcp_functions/validate_infrastructure_quality.py +745 -0
- package/dist/content/skills/specialist-devops-infra/resources/checklists/devops-validation.md +427 -0
- package/dist/content/skills/specialist-devops-infra/resources/examples/devops-examples.md +652 -0
- package/dist/content/skills/specialist-devops-infra/resources/reference/devops-guide.md +1244 -0
- package/dist/content/skills/specialist-devops-infra/resources/templates/ci-cd-pipeline.yml +40 -0
- package/dist/content/skills/specialist-documentacao-tecnica/MCP_INTEGRATION.md +797 -0
- package/dist/content/skills/specialist-documentacao-tecnica/README.md +304 -0
- package/dist/content/skills/specialist-documentacao-tecnica/SKILL.md +202 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/init_documentation_structure.py +733 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/process_documentation_for_publishing.py +888 -0
- package/dist/content/skills/specialist-documentacao-tecnica/mcp_functions/validate_documentation_quality.py +775 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/checklists/documentation-validation.md +296 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/examples/documentation-examples.md +515 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/reference/documentation-guide.md +798 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/api-docs.md +619 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/design-doc.md +250 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/guia-tecnico.md +383 -0
- package/dist/content/skills/specialist-documentacao-tecnica/resources/templates/readme-template.md +462 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/MCP_INTEGRATION.md +457 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/README.md +295 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/SKILL.md +214 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/init_requirements.py +152 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/process_requirements.py +445 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/mcp_functions/validate_requirements.py +475 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/checklists/requirements-validation.md +258 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/examples/requirements-examples.md +316 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/reference/requirements-guide.md +651 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/criterios-aceite.md +484 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/matriz-rastreabilidade.md +246 -0
- package/dist/content/skills/specialist-engenharia-requisitos-ia/resources/templates/requisitos.md +244 -0
- package/dist/content/skills/specialist-exploracao-codebase/MCP_INTEGRATION.md +155 -0
- package/dist/content/skills/specialist-exploracao-codebase/README.md +320 -0
- package/dist/content/skills/specialist-exploracao-codebase/SKILL.md +194 -0
- package/dist/content/skills/specialist-exploracao-codebase/mcp_functions/README.md +39 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/checklists/exploration-validation.md +51 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/examples/exploration-examples.md +106 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/reference/exploration-guide.md +111 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/codebase-map.md +129 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/refactoring-plan.md +96 -0
- package/dist/content/skills/specialist-exploracao-codebase/resources/templates/technical-debt-report.md +69 -0
- package/dist/content/skills/specialist-gestao-produto/MCP_INTEGRATION.md +436 -0
- package/dist/content/skills/specialist-gestao-produto/README.md +202 -0
- package/dist/content/skills/specialist-gestao-produto/SKILL.md +174 -0
- package/dist/content/skills/specialist-gestao-produto/resources/checklists/prd-validation.md +165 -0
- package/dist/content/skills/specialist-gestao-produto/resources/examples/prd-examples.md +231 -0
- package/dist/content/skills/specialist-gestao-produto/resources/reference/product-guide.md +416 -0
- package/dist/content/skills/specialist-gestao-produto/resources/templates/PRD.md +212 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/init_prd.py +170 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/process_prd.py +388 -0
- package/dist/content/skills/specialist-gestao-produto/scripts/validate_prd.py +406 -0
- package/dist/content/skills/specialist-migracao-modernizacao/MCP_INTEGRATION.md +17 -0
- package/dist/content/skills/specialist-migracao-modernizacao/README.md +46 -0
- package/dist/content/skills/specialist-migracao-modernizacao/SKILL.md +485 -0
- package/dist/content/skills/specialist-migracao-modernizacao/mcp_functions/README.md +10 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/checklists/migration-validation.md +23 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/examples/migration-examples.md +30 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/reference/migration-guide.md +27 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/migration-assessment.md +391 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/modernization-roadmap.md +479 -0
- package/dist/content/skills/specialist-migracao-modernizacao/resources/templates/risk-analysis.md +527 -0
- package/dist/content/skills/specialist-mobile-design-avancado/MCP_INTEGRATION.md +17 -0
- package/dist/content/skills/specialist-mobile-design-avancado/README.md +46 -0
- package/dist/content/skills/specialist-mobile-design-avancado/SKILL.md +567 -0
- package/dist/content/skills/specialist-mobile-design-avancado/mcp_functions/README.md +10 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/checklists/design-validation.md +23 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/examples/design-examples.md +46 -0
- package/dist/content/skills/specialist-mobile-design-avancado/resources/reference/design-guide.md +23 -0
- package/dist/content/skills/specialist-modelagem-dominio/MCP_INTEGRATION.md +336 -0
- package/dist/content/skills/specialist-modelagem-dominio/README.md +314 -0
- package/dist/content/skills/specialist-modelagem-dominio/SKILL.md +241 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/init_domain.py +479 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/process_domain.py +526 -0
- package/dist/content/skills/specialist-modelagem-dominio/mcp_functions/validate_domain.py +569 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/checklists/domain-validation.md +341 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/examples/domain-examples.md +505 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/reference/domain-guide.md +601 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/reference/domain-modeling-complete-guide.md +1126 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/arquitetura-c4.md +477 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/casos-uso.md +395 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/entidades-relacionamentos.md +368 -0
- package/dist/content/skills/specialist-modelagem-dominio/resources/templates/modelo-dominio.md +311 -0
- package/dist/content/skills/specialist-observabilidade/SKILL.md +462 -0
- package/dist/content/skills/specialist-performance-escalabilidade/SKILL.md +329 -0
- package/dist/content/skills/specialist-plano-execucao-ia/MCP_INTEGRATION.md +371 -0
- package/dist/content/skills/specialist-plano-execucao-ia/README.md +194 -0
- package/dist/content/skills/specialist-plano-execucao-ia/SKILL.md +271 -0
- package/dist/content/skills/specialist-plano-execucao-ia/mcp_functions/README.md +38 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/checklists/planning-validation.md +144 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/examples/planning-examples.md +203 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/reference/planning-guide.md +316 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/backlog.md +146 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-backend.md +157 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-frontend.md +116 -0
- package/dist/content/skills/specialist-plano-execucao-ia/resources/templates/historia-usuario.md +66 -0
- package/dist/content/skills/specialist-prototipagem-stitch/MCP_INTEGRATION.md +533 -0
- package/dist/content/skills/specialist-prototipagem-stitch/README.md +321 -0
- package/dist/content/skills/specialist-prototipagem-stitch/SKILL.md +194 -0
- package/dist/content/skills/specialist-prototipagem-stitch/mcp_functions/README.md +239 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/checklists/stitch-validation.md +357 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/examples/stitch-examples.md +372 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/reference/stitch-guide.md +517 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/templates/prompt-stitch.md +429 -0
- package/dist/content/skills/specialist-prototipagem-stitch/resources/templates/prototipo-stitch.md +317 -0
- package/dist/content/skills/specialist-seguranca-informacao/MCP_INTEGRATION.md +466 -0
- package/dist/content/skills/specialist-seguranca-informacao/README.md +245 -0
- package/dist/content/skills/specialist-seguranca-informacao/SKILL.md +343 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/init_security.py +405 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/process_security.py +611 -0
- package/dist/content/skills/specialist-seguranca-informacao/mcp_functions/validate_security.py +468 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/checklists/security-validation.md +368 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/examples/security-examples.md +358 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/reference/security-guide.md +757 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/checklist-seguranca.md +383 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/slo-sli.md +244 -0
- package/dist/content/skills/specialist-seguranca-informacao/resources/templates/threat-modeling.md +161 -0
- package/dist/content/skills/specialist-ux-design/MCP_INTEGRATION.md +294 -0
- package/dist/content/skills/specialist-ux-design/README.md +304 -0
- package/dist/content/skills/specialist-ux-design/SKILL.md +212 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/init_ux.py +126 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/process_ux.py +408 -0
- package/dist/content/skills/specialist-ux-design/mcp_functions/validate_ux.py +379 -0
- package/dist/content/skills/specialist-ux-design/resources/checklists/ux-validation.md +77 -0
- package/dist/content/skills/specialist-ux-design/resources/examples/ux-examples.md +161 -0
- package/dist/content/skills/specialist-ux-design/resources/reference/ux-guide.md +184 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/design-doc.md +160 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/jornada-usuario.md +126 -0
- package/dist/content/skills/specialist-ux-design/resources/templates/wireframes.md +155 -0
- package/dist/core/adr/ADRGenerator.d.ts +28 -0
- package/dist/core/adr/ADRGenerator.d.ts.map +1 -0
- package/dist/core/adr/ADRGenerator.js +63 -0
- package/dist/core/adr/ADRGenerator.js.map +1 -0
- package/dist/core/adr/index.d.ts +2 -0
- package/dist/core/adr/index.d.ts.map +1 -0
- package/dist/core/adr/index.js +2 -0
- package/dist/core/adr/index.js.map +1 -0
- package/dist/core/architecture/FitnessFunctions.d.ts +67 -0
- package/dist/core/architecture/FitnessFunctions.d.ts.map +1 -0
- package/dist/core/architecture/FitnessFunctions.js +292 -0
- package/dist/core/architecture/FitnessFunctions.js.map +1 -0
- package/dist/core/architecture/index.d.ts +3 -0
- package/dist/core/architecture/index.d.ts.map +1 -0
- package/dist/core/architecture/index.js +3 -0
- package/dist/core/architecture/index.js.map +1 -0
- package/dist/core/architecture/types.d.ts +42 -0
- package/dist/core/architecture/types.d.ts.map +1 -0
- package/dist/core/architecture/types.js +5 -0
- package/dist/core/architecture/types.js.map +1 -0
- package/dist/core/atam/ATAMAnalyzer.d.ts +19 -0
- package/dist/core/atam/ATAMAnalyzer.d.ts.map +1 -0
- package/dist/core/atam/ATAMAnalyzer.js +206 -0
- package/dist/core/atam/ATAMAnalyzer.js.map +1 -0
- package/dist/core/atam/ATAMReporter.d.ts +16 -0
- package/dist/core/atam/ATAMReporter.d.ts.map +1 -0
- package/dist/core/atam/ATAMReporter.js +175 -0
- package/dist/core/atam/ATAMReporter.js.map +1 -0
- package/dist/core/atam/QualityScenarios.d.ts +16 -0
- package/dist/core/atam/QualityScenarios.d.ts.map +1 -0
- package/dist/core/atam/QualityScenarios.js +149 -0
- package/dist/core/atam/QualityScenarios.js.map +1 -0
- package/dist/core/atam/RiskRegistry.d.ts +21 -0
- package/dist/core/atam/RiskRegistry.d.ts.map +1 -0
- package/dist/core/atam/RiskRegistry.js +83 -0
- package/dist/core/atam/RiskRegistry.js.map +1 -0
- package/dist/core/atam/index.d.ts +6 -0
- package/dist/core/atam/index.d.ts.map +1 -0
- package/dist/core/atam/index.js +6 -0
- package/dist/core/atam/index.js.map +1 -0
- package/dist/core/atam/types.d.ts +86 -0
- package/dist/core/atam/types.d.ts.map +1 -0
- package/dist/core/atam/types.js +5 -0
- package/dist/core/atam/types.js.map +1 -0
- package/dist/core/authority/AuthorityManager.d.ts +19 -0
- package/dist/core/authority/AuthorityManager.d.ts.map +1 -0
- package/dist/core/authority/AuthorityManager.js +66 -0
- package/dist/core/authority/AuthorityManager.js.map +1 -0
- package/dist/core/authority/index.d.ts +2 -0
- package/dist/core/authority/index.d.ts.map +1 -0
- package/dist/core/authority/index.js +2 -0
- package/dist/core/authority/index.js.map +1 -0
- package/dist/core/autofix/AutoFixEngine.d.ts +17 -0
- package/dist/core/autofix/AutoFixEngine.d.ts.map +1 -0
- package/dist/core/autofix/AutoFixEngine.js +46 -0
- package/dist/core/autofix/AutoFixEngine.js.map +1 -0
- package/dist/core/autofix/index.d.ts +2 -0
- package/dist/core/autofix/index.d.ts.map +1 -0
- package/dist/core/autofix/index.js +2 -0
- package/dist/core/autofix/index.js.map +1 -0
- package/dist/core/automation/AutoExecutor.d.ts +20 -0
- package/dist/core/automation/AutoExecutor.d.ts.map +1 -0
- package/dist/core/automation/AutoExecutor.js +38 -0
- package/dist/core/automation/AutoExecutor.js.map +1 -0
- package/dist/core/automation/index.d.ts +2 -0
- package/dist/core/automation/index.d.ts.map +1 -0
- package/dist/core/automation/index.js +2 -0
- package/dist/core/automation/index.js.map +1 -0
- package/dist/core/checkpoint/CheckpointManager.d.ts +43 -0
- package/dist/core/checkpoint/CheckpointManager.d.ts.map +1 -0
- package/dist/core/checkpoint/CheckpointManager.js +158 -0
- package/dist/core/checkpoint/CheckpointManager.js.map +1 -0
- package/dist/core/checkpoint/RollbackEngine.d.ts +31 -0
- package/dist/core/checkpoint/RollbackEngine.d.ts.map +1 -0
- package/dist/core/checkpoint/RollbackEngine.js +176 -0
- package/dist/core/checkpoint/RollbackEngine.js.map +1 -0
- package/dist/core/checkpoint/index.d.ts +4 -0
- package/dist/core/checkpoint/index.d.ts.map +1 -0
- package/dist/core/checkpoint/index.js +4 -0
- package/dist/core/checkpoint/index.js.map +1 -0
- package/dist/core/checkpoint/types.d.ts +33 -0
- package/dist/core/checkpoint/types.d.ts.map +1 -0
- package/dist/core/checkpoint/types.js +2 -0
- package/dist/core/checkpoint/types.js.map +1 -0
- package/dist/core/consistency/ConsistencyAnalyzer.d.ts +12 -0
- package/dist/core/consistency/ConsistencyAnalyzer.d.ts.map +1 -0
- package/dist/core/consistency/ConsistencyAnalyzer.js +79 -0
- package/dist/core/consistency/ConsistencyAnalyzer.js.map +1 -0
- package/dist/core/consistency/index.d.ts +3 -0
- package/dist/core/consistency/index.d.ts.map +1 -0
- package/dist/core/consistency/index.js +3 -0
- package/dist/core/consistency/index.js.map +1 -0
- package/dist/core/consistency/types.d.ts +43 -0
- package/dist/core/consistency/types.d.ts.map +1 -0
- package/dist/core/consistency/types.js +5 -0
- package/dist/core/consistency/types.js.map +1 -0
- package/dist/core/context/ContextDetector.d.ts +14 -0
- package/dist/core/context/ContextDetector.d.ts.map +1 -0
- package/dist/core/context/ContextDetector.js +58 -0
- package/dist/core/context/ContextDetector.js.map +1 -0
- package/dist/core/context/index.d.ts +3 -0
- package/dist/core/context/index.d.ts.map +1 -0
- package/dist/core/context/index.js +3 -0
- package/dist/core/context/index.js.map +1 -0
- package/dist/core/context/types.d.ts +41 -0
- package/dist/core/context/types.d.ts.map +1 -0
- package/dist/core/context/types.js +5 -0
- package/dist/core/context/types.js.map +1 -0
- package/dist/core/decision/AlternativeGenerator.d.ts +32 -0
- package/dist/core/decision/AlternativeGenerator.d.ts.map +1 -0
- package/dist/core/decision/AlternativeGenerator.js +155 -0
- package/dist/core/decision/AlternativeGenerator.js.map +1 -0
- package/dist/core/decision/ConfidenceCalculator.d.ts +42 -0
- package/dist/core/decision/ConfidenceCalculator.d.ts.map +1 -0
- package/dist/core/decision/ConfidenceCalculator.js +114 -0
- package/dist/core/decision/ConfidenceCalculator.js.map +1 -0
- package/dist/core/decision/DecisionEngine.d.ts +42 -0
- package/dist/core/decision/DecisionEngine.d.ts.map +1 -0
- package/dist/core/decision/DecisionEngine.js +144 -0
- package/dist/core/decision/DecisionEngine.js.map +1 -0
- package/dist/core/decision/DecisionMatrix.d.ts +29 -0
- package/dist/core/decision/DecisionMatrix.d.ts.map +1 -0
- package/dist/core/decision/DecisionMatrix.js +66 -0
- package/dist/core/decision/DecisionMatrix.js.map +1 -0
- package/dist/core/decision/index.d.ts +6 -0
- package/dist/core/decision/index.d.ts.map +1 -0
- package/dist/core/decision/index.js +6 -0
- package/dist/core/decision/index.js.map +1 -0
- package/dist/core/decision/types.d.ts +40 -0
- package/dist/core/decision/types.d.ts.map +1 -0
- package/dist/core/decision/types.js +5 -0
- package/dist/core/decision/types.js.map +1 -0
- package/dist/core/discovery/CodebaseDiscovery.d.ts +19 -0
- package/dist/core/discovery/CodebaseDiscovery.d.ts.map +1 -0
- package/dist/core/discovery/CodebaseDiscovery.js +83 -0
- package/dist/core/discovery/CodebaseDiscovery.js.map +1 -0
- package/dist/core/discovery/index.d.ts +2 -0
- package/dist/core/discovery/index.d.ts.map +1 -0
- package/dist/core/discovery/index.js +2 -0
- package/dist/core/discovery/index.js.map +1 -0
- package/dist/core/feedback/FeedbackLoop.d.ts +21 -0
- package/dist/core/feedback/FeedbackLoop.d.ts.map +1 -0
- package/dist/core/feedback/FeedbackLoop.js +45 -0
- package/dist/core/feedback/FeedbackLoop.js.map +1 -0
- package/dist/core/feedback/index.d.ts +2 -0
- package/dist/core/feedback/index.d.ts.map +1 -0
- package/dist/core/feedback/index.js +2 -0
- package/dist/core/feedback/index.js.map +1 -0
- package/dist/core/growth/GrowthProjector.d.ts +12 -0
- package/dist/core/growth/GrowthProjector.d.ts.map +1 -0
- package/dist/core/growth/GrowthProjector.js +93 -0
- package/dist/core/growth/GrowthProjector.js.map +1 -0
- package/dist/core/growth/index.d.ts +3 -0
- package/dist/core/growth/index.d.ts.map +1 -0
- package/dist/core/growth/index.js +3 -0
- package/dist/core/growth/index.js.map +1 -0
- package/dist/core/growth/types.d.ts +40 -0
- package/dist/core/growth/types.d.ts.map +1 -0
- package/dist/core/growth/types.js +5 -0
- package/dist/core/growth/types.js.map +1 -0
- package/dist/core/impact/ImpactAnalyzer.d.ts +22 -0
- package/dist/core/impact/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/core/impact/ImpactAnalyzer.js +43 -0
- package/dist/core/impact/ImpactAnalyzer.js.map +1 -0
- package/dist/core/impact/index.d.ts +2 -0
- package/dist/core/impact/index.d.ts.map +1 -0
- package/dist/core/impact/index.js +2 -0
- package/dist/core/impact/index.js.map +1 -0
- package/dist/core/knowledge/ADRManager.d.ts +22 -0
- package/dist/core/knowledge/ADRManager.d.ts.map +1 -0
- package/dist/core/knowledge/ADRManager.js +82 -0
- package/dist/core/knowledge/ADRManager.js.map +1 -0
- package/dist/core/knowledge/ContextLoader.d.ts +18 -0
- package/dist/core/knowledge/ContextLoader.d.ts.map +1 -0
- package/dist/core/knowledge/ContextLoader.js +48 -0
- package/dist/core/knowledge/ContextLoader.js.map +1 -0
- package/dist/core/knowledge/KnowledgeBase.d.ts +35 -0
- package/dist/core/knowledge/KnowledgeBase.d.ts.map +1 -0
- package/dist/core/knowledge/KnowledgeBase.js +143 -0
- package/dist/core/knowledge/KnowledgeBase.js.map +1 -0
- package/dist/core/knowledge/PatternRegistry.d.ts +22 -0
- package/dist/core/knowledge/PatternRegistry.d.ts.map +1 -0
- package/dist/core/knowledge/PatternRegistry.js +56 -0
- package/dist/core/knowledge/PatternRegistry.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +6 -0
- package/dist/core/knowledge/index.d.ts.map +1 -0
- package/dist/core/knowledge/index.js +6 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/knowledge/types.d.ts +60 -0
- package/dist/core/knowledge/types.d.ts.map +1 -0
- package/dist/core/knowledge/types.js +2 -0
- package/dist/core/knowledge/types.js.map +1 -0
- package/dist/core/metrics/MetricsCollector.d.ts +21 -0
- package/dist/core/metrics/MetricsCollector.d.ts.map +1 -0
- package/dist/core/metrics/MetricsCollector.js +20 -0
- package/dist/core/metrics/MetricsCollector.js.map +1 -0
- package/dist/core/metrics/index.d.ts +2 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +2 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/notification/NotificationManager.d.ts +20 -0
- package/dist/core/notification/NotificationManager.d.ts.map +1 -0
- package/dist/core/notification/NotificationManager.js +16 -0
- package/dist/core/notification/NotificationManager.js.map +1 -0
- package/dist/core/notification/index.d.ts +2 -0
- package/dist/core/notification/index.d.ts.map +1 -0
- package/dist/core/notification/index.js +2 -0
- package/dist/core/notification/index.js.map +1 -0
- package/dist/core/risk/RiskEvaluator.d.ts +11 -0
- package/dist/core/risk/RiskEvaluator.d.ts.map +1 -0
- package/dist/core/risk/RiskEvaluator.js +83 -0
- package/dist/core/risk/RiskEvaluator.js.map +1 -0
- package/dist/core/risk/index.d.ts +3 -0
- package/dist/core/risk/index.d.ts.map +1 -0
- package/dist/core/risk/index.js +3 -0
- package/dist/core/risk/index.js.map +1 -0
- package/dist/core/risk/types.d.ts +19 -0
- package/dist/core/risk/types.d.ts.map +1 -0
- package/dist/core/risk/types.js +2 -0
- package/dist/core/risk/types.js.map +1 -0
- package/dist/core/roadmap/RoadmapManager.d.ts +14 -0
- package/dist/core/roadmap/RoadmapManager.d.ts.map +1 -0
- package/dist/core/roadmap/RoadmapManager.js +81 -0
- package/dist/core/roadmap/RoadmapManager.js.map +1 -0
- package/dist/core/roadmap/index.d.ts +3 -0
- package/dist/core/roadmap/index.d.ts.map +1 -0
- package/dist/core/roadmap/index.js +3 -0
- package/dist/core/roadmap/index.js.map +1 -0
- package/dist/core/roadmap/types.d.ts +64 -0
- package/dist/core/roadmap/types.d.ts.map +1 -0
- package/dist/core/roadmap/types.js +5 -0
- package/dist/core/roadmap/types.js.map +1 -0
- package/dist/core/strangler/StranglerOrchestrator.d.ts +14 -0
- package/dist/core/strangler/StranglerOrchestrator.d.ts.map +1 -0
- package/dist/core/strangler/StranglerOrchestrator.js +87 -0
- package/dist/core/strangler/StranglerOrchestrator.js.map +1 -0
- package/dist/core/strangler/index.d.ts +3 -0
- package/dist/core/strangler/index.d.ts.map +1 -0
- package/dist/core/strangler/index.js +3 -0
- package/dist/core/strangler/index.js.map +1 -0
- package/dist/core/strangler/types.d.ts +70 -0
- package/dist/core/strangler/types.d.ts.map +1 -0
- package/dist/core/strangler/types.js +5 -0
- package/dist/core/strangler/types.js.map +1 -0
- package/dist/core/testing/TestRunner.d.ts +17 -0
- package/dist/core/testing/TestRunner.d.ts.map +1 -0
- package/dist/core/testing/TestRunner.js +22 -0
- package/dist/core/testing/TestRunner.js.map +1 -0
- package/dist/core/testing/index.d.ts +2 -0
- package/dist/core/testing/index.d.ts.map +1 -0
- package/dist/core/testing/index.js +2 -0
- package/dist/core/testing/index.js.map +1 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.d.ts +24 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.d.ts.map +1 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.js +51 -0
- package/dist/core/tradeoff/TradeoffAnalyzer.js.map +1 -0
- package/dist/core/tradeoff/index.d.ts +2 -0
- package/dist/core/tradeoff/index.d.ts.map +1 -0
- package/dist/core/tradeoff/index.js +2 -0
- package/dist/core/tradeoff/index.js.map +1 -0
- package/dist/core/validation/DependencyValidator.d.ts +28 -0
- package/dist/core/validation/DependencyValidator.d.ts.map +1 -0
- package/dist/core/validation/DependencyValidator.js +188 -0
- package/dist/core/validation/DependencyValidator.js.map +1 -0
- package/dist/core/validation/SecurityValidator.d.ts +44 -0
- package/dist/core/validation/SecurityValidator.d.ts.map +1 -0
- package/dist/core/validation/SecurityValidator.js +248 -0
- package/dist/core/validation/SecurityValidator.js.map +1 -0
- package/dist/core/validation/ValidationPipeline.d.ts +62 -0
- package/dist/core/validation/ValidationPipeline.d.ts.map +1 -0
- package/dist/core/validation/ValidationPipeline.js +216 -0
- package/dist/core/validation/ValidationPipeline.js.map +1 -0
- package/dist/core/validation/index.d.ts +4 -0
- package/dist/core/validation/index.d.ts.map +1 -0
- package/dist/core/validation/index.js +4 -0
- package/dist/core/validation/index.js.map +1 -0
- package/dist/core/validation/layers/ArchitectureValidator.d.ts +21 -0
- package/dist/core/validation/layers/ArchitectureValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/ArchitectureValidator.js +226 -0
- package/dist/core/validation/layers/ArchitectureValidator.js.map +1 -0
- package/dist/core/validation/layers/QualityValidator.d.ts +23 -0
- package/dist/core/validation/layers/QualityValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/QualityValidator.js +259 -0
- package/dist/core/validation/layers/QualityValidator.js.map +1 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.d.ts +12 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.d.ts.map +1 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.js +54 -0
- package/dist/core/validation/layers/SecurityValidatorWrapper.js.map +1 -0
- package/dist/core/validation/layers/SemanticValidator.d.ts +21 -0
- package/dist/core/validation/layers/SemanticValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/SemanticValidator.js +182 -0
- package/dist/core/validation/layers/SemanticValidator.js.map +1 -0
- package/dist/core/validation/layers/SyntacticValidator.d.ts +17 -0
- package/dist/core/validation/layers/SyntacticValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/SyntacticValidator.js +194 -0
- package/dist/core/validation/layers/SyntacticValidator.js.map +1 -0
- package/dist/core/validation/types.d.ts +90 -0
- package/dist/core/validation/types.d.ts.map +1 -0
- package/dist/core/validation/types.js +24 -0
- package/dist/core/validation/types.js.map +1 -0
- package/dist/frontend-first/contract-generator.d.ts +47 -0
- package/dist/frontend-first/contract-generator.d.ts.map +1 -0
- package/dist/frontend-first/contract-generator.js +312 -0
- package/dist/frontend-first/contract-generator.js.map +1 -0
- package/dist/frontend-first/mock-generator.d.ts +23 -0
- package/dist/frontend-first/mock-generator.d.ts.map +1 -0
- package/dist/frontend-first/mock-generator.js +186 -0
- package/dist/frontend-first/mock-generator.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/optimization/batch-prompts.d.ts +27 -0
- package/dist/optimization/batch-prompts.d.ts.map +1 -0
- package/dist/optimization/batch-prompts.js +178 -0
- package/dist/optimization/batch-prompts.js.map +1 -0
- package/dist/optimization/context-cache.d.ts +45 -0
- package/dist/optimization/context-cache.d.ts.map +1 -0
- package/dist/optimization/context-cache.js +149 -0
- package/dist/optimization/context-cache.js.map +1 -0
- package/dist/optimization/smart-validation.d.ts +43 -0
- package/dist/optimization/smart-validation.d.ts.map +1 -0
- package/dist/optimization/smart-validation.js +137 -0
- package/dist/optimization/smart-validation.js.map +1 -0
- package/dist/state/storage.d.ts +1 -1
- package/dist/state/storage.d.ts.map +1 -1
- package/dist/state/storage.js +2 -1
- package/dist/state/storage.js.map +1 -1
- package/dist/stdio.js +186 -0
- package/dist/stdio.js.map +1 -1
- package/dist/tasks/task-manager.d.ts +30 -0
- package/dist/tasks/task-manager.d.ts.map +1 -0
- package/dist/tasks/task-manager.js +290 -0
- package/dist/tasks/task-manager.js.map +1 -0
- package/dist/tools/atualizar-tarefa.d.ts +17 -0
- package/dist/tools/atualizar-tarefa.d.ts.map +1 -0
- package/dist/tools/atualizar-tarefa.js +200 -0
- package/dist/tools/atualizar-tarefa.js.map +1 -0
- package/dist/tools/configurar-modo.d.ts +10 -0
- package/dist/tools/configurar-modo.d.ts.map +1 -0
- package/dist/tools/configurar-modo.js +121 -0
- package/dist/tools/configurar-modo.js.map +1 -0
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +35 -4
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/criar-tarefa.d.ts +17 -0
- package/dist/tools/criar-tarefa.d.ts.map +1 -0
- package/dist/tools/criar-tarefa.js +132 -0
- package/dist/tools/criar-tarefa.js.map +1 -0
- package/dist/tools/discovery.d.ts +121 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +344 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/fase1/checkpoint.tools.d.ts +150 -0
- package/dist/tools/fase1/checkpoint.tools.d.ts.map +1 -0
- package/dist/tools/fase1/checkpoint.tools.js +165 -0
- package/dist/tools/fase1/checkpoint.tools.js.map +1 -0
- package/dist/tools/fase1/knowledge.tools.d.ts +265 -0
- package/dist/tools/fase1/knowledge.tools.d.ts.map +1 -0
- package/dist/tools/fase1/knowledge.tools.js +209 -0
- package/dist/tools/fase1/knowledge.tools.js.map +1 -0
- package/dist/tools/fase1/misc.tools.d.ts +113 -0
- package/dist/tools/fase1/misc.tools.d.ts.map +1 -0
- package/dist/tools/fase1/misc.tools.js +99 -0
- package/dist/tools/fase1/misc.tools.js.map +1 -0
- package/dist/tools/fase1/validation.tools.d.ts +103 -0
- package/dist/tools/fase1/validation.tools.d.ts.map +1 -0
- package/dist/tools/fase1/validation.tools.js +174 -0
- package/dist/tools/fase1/validation.tools.js.map +1 -0
- package/dist/tools/fluxos-alternativos.js +4 -4
- package/dist/tools/fluxos-alternativos.js.map +1 -1
- package/dist/tools/gerar-contrato-api.d.ts +15 -0
- package/dist/tools/gerar-contrato-api.d.ts.map +1 -0
- package/dist/tools/gerar-contrato-api.js +216 -0
- package/dist/tools/gerar-contrato-api.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts +12 -0
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +92 -29
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/listar-tarefas.d.ts +16 -0
- package/dist/tools/listar-tarefas.d.ts.map +1 -0
- package/dist/tools/listar-tarefas.js +215 -0
- package/dist/tools/listar-tarefas.js.map +1 -0
- package/dist/tools/phase2/architecture.tools.d.ts +37 -0
- package/dist/tools/phase2/architecture.tools.d.ts.map +1 -0
- package/dist/tools/phase2/architecture.tools.js +51 -0
- package/dist/tools/phase2/architecture.tools.js.map +1 -0
- package/dist/tools/phase2/decision.tools.d.ts +61 -0
- package/dist/tools/phase2/decision.tools.d.ts.map +1 -0
- package/dist/tools/phase2/decision.tools.js +69 -0
- package/dist/tools/phase2/decision.tools.js.map +1 -0
- package/dist/tools/phase2/index.d.ts +8 -0
- package/dist/tools/phase2/index.d.ts.map +1 -0
- package/dist/tools/phase2/index.js +16 -0
- package/dist/tools/phase2/index.js.map +1 -0
- package/dist/tools/phase2/validation.tools.d.ts +40 -0
- package/dist/tools/phase2/validation.tools.d.ts.map +1 -0
- package/dist/tools/phase2/validation.tools.js +43 -0
- package/dist/tools/phase2/validation.tools.js.map +1 -0
- package/dist/tools/phase3/atam.tools.d.ts +26 -0
- package/dist/tools/phase3/atam.tools.d.ts.map +1 -0
- package/dist/tools/phase3/atam.tools.js +48 -0
- package/dist/tools/phase3/atam.tools.js.map +1 -0
- package/dist/tools/phase3/consistency.tools.d.ts +15 -0
- package/dist/tools/phase3/consistency.tools.d.ts.map +1 -0
- package/dist/tools/phase3/consistency.tools.js +20 -0
- package/dist/tools/phase3/consistency.tools.js.map +1 -0
- package/dist/tools/phase3/context.tools.d.ts +25 -0
- package/dist/tools/phase3/context.tools.d.ts.map +1 -0
- package/dist/tools/phase3/context.tools.js +32 -0
- package/dist/tools/phase3/context.tools.js.map +1 -0
- package/dist/tools/phase3/growth.tools.d.ts +28 -0
- package/dist/tools/phase3/growth.tools.d.ts.map +1 -0
- package/dist/tools/phase3/growth.tools.js +32 -0
- package/dist/tools/phase3/growth.tools.js.map +1 -0
- package/dist/tools/phase3/index.d.ts +10 -0
- package/dist/tools/phase3/index.d.ts.map +1 -0
- package/dist/tools/phase3/index.js +10 -0
- package/dist/tools/phase3/index.js.map +1 -0
- package/dist/tools/phase3/roadmap.tools.d.ts +41 -0
- package/dist/tools/phase3/roadmap.tools.d.ts.map +1 -0
- package/dist/tools/phase3/roadmap.tools.js +44 -0
- package/dist/tools/phase3/roadmap.tools.js.map +1 -0
- package/dist/tools/phase3/strangler.tools.d.ts +37 -0
- package/dist/tools/phase3/strangler.tools.d.ts.map +1 -0
- package/dist/tools/phase3/strangler.tools.js +44 -0
- package/dist/tools/phase3/strangler.tools.js.map +1 -0
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +44 -11
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +18 -5
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +17 -0
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/config.d.ts +46 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +162 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/tasks.d.ts +100 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +2 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/utils/__tests__/prompt-mapper.test.d.ts +2 -0
- package/dist/utils/__tests__/prompt-mapper.test.d.ts.map +1 -0
- package/dist/utils/__tests__/prompt-mapper.test.js +184 -0
- package/dist/utils/__tests__/prompt-mapper.test.js.map +1 -0
- package/dist/utils/history.d.ts +10 -0
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +12 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/ide-paths.d.ts +61 -0
- package/dist/utils/ide-paths.d.ts.map +1 -0
- package/dist/utils/ide-paths.js +110 -0
- package/dist/utils/ide-paths.js.map +1 -0
- package/dist/utils/prompt-mapper.d.ts +48 -0
- package/dist/utils/prompt-mapper.d.ts.map +1 -1
- package/dist/utils/prompt-mapper.js +104 -0
- package/dist/utils/prompt-mapper.js.map +1 -1
- package/package.json +5 -5
- package/dist/content/examples/Exemplo de Fluxo Completo com Java e Spring Boot.md +0 -250
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Filament.md +0 -278
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Livewire.md +0 -261
- package/dist/content/examples/Exemplo de Fluxo Completo com Node e NestJS.md +0 -258
- package/dist/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +0 -119
- package/dist/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +0 -147
- package/dist/content/guides/Checklist Mestre de Entrega.md +0 -68
- package/dist/content/guides/Gates de Qualidade.md +0 -209
- package/dist/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +0 -355
- package/dist/content/guides/Guia de Chaos Engineering.md +0 -267
- package/dist/content/guides/Guia de Estrat/303/251gias de Cache.md" +0 -352
- package/dist/content/guides/Guia de Migrations Zero-Downtime.md +0 -311
- package/dist/content/guides/Guia de Multi-tenancy.md +0 -368
- package/dist/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +0 -195
- package/dist/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +0 -162
- package/dist/content/guides/Guia de SLOs e Error Budgets.md +0 -315
- package/dist/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +0 -93
- package/dist/content/guides/Rules base.md +0 -90
- package/dist/content/playbook/Playbook de Desenvolvimento com IA.md +0 -364
- package/dist/content/prompts/README.md +0 -203
- package/dist/content/prompts/acessibilidade/analise-acessibilidade.md +0 -257
- package/dist/content/prompts/apis/design-api-rest.md +0 -303
- package/dist/content/prompts/apis/idempotencia.md +0 -254
- package/dist/content/prompts/apis/versionamento.md +0 -313
- package/dist/content/prompts/arquitetura/arquitetura-c4-completo.md +0 -190
- package/dist/content/prompts/arquitetura/clean-architecture.md +0 -151
- package/dist/content/prompts/arquitetura/multi-tenancy.md +0 -235
- package/dist/content/prompts/database/migrations-zero-downtime.md +0 -192
- package/dist/content/prompts/database/otimizacao-queries.md +0 -296
- package/dist/content/prompts/desenvolvimento/code-review.md +0 -301
- package/dist/content/prompts/desenvolvimento/gerar-servico.md +0 -271
- package/dist/content/prompts/devops/docker-compose.md +0 -336
- package/dist/content/prompts/devops/feature-flags.md +0 -374
- package/dist/content/prompts/devops/kubernetes-deploy.md +0 -460
- package/dist/content/prompts/devops/pipeline-cicd.md +0 -358
- package/dist/content/prompts/devops/terraform-iac.md +0 -502
- package/dist/content/prompts/escalabilidade/analise-performance.md +0 -240
- package/dist/content/prompts/escalabilidade/analise-performance.txt +0 -94
- package/dist/content/prompts/escalabilidade/caching.md +0 -255
- package/dist/content/prompts/observabilidade/chaos-testing.md +0 -237
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.md +0 -263
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.txt +0 -134
- package/dist/content/prompts/observabilidade/slos.md +0 -215
- package/dist/content/prompts/produto/discovery-inicial.md +0 -203
- package/dist/content/prompts/produto/discovery-inicial.txt +0 -33
- package/dist/content/prompts/requisitos/refinar-requisitos.md +0 -232
- package/dist/content/prompts/requisitos/refinar-requisitos.txt +0 -40
- package/dist/content/prompts/seguranca/analise-seguranca.md +0 -243
- package/dist/content/prompts/seguranca/pentest-checklist.md +0 -333
- package/dist/content/prompts/seguranca/rate-limiting.md +0 -356
- package/dist/content/prompts/seguranca/revisao-lgpd.md +0 -227
- package/dist/content/prompts/seguranca/threat-modeling.md +0 -224
- package/dist/content/prompts/testes/contract-testing.md +0 -340
- package/dist/content/prompts/testes/gerar-testes-unitarios.md +0 -474
- package/dist/content/prompts/testes/testes-e2e.md +0 -460
- package/dist/content/prompts/testes/testes-integracao.md +0 -418
- package/dist/content/prompts/testes/testes-performance.md +0 -458
- package/dist/content/prompts/ux/gerar-ui-stitch.md +0 -151
- package/dist/content/specialists/Especialista em Acessibilidade.md +0 -266
- package/dist/content/specialists/Especialista em An/303/241lise de Testes.md" +0 -434
- package/dist/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +0 -358
- package/dist/content/specialists/Especialista em Arquitetura de Software.md +0 -177
- package/dist/content/specialists/Especialista em Banco de Dados.md +0 -260
- package/dist/content/specialists/Especialista em Contrato de API.md +0 -172
- package/dist/content/specialists/Especialista em Dados e Analytics com IA.md +0 -246
- package/dist/content/specialists/Especialista em Debugging e Troubleshooting.md +0 -191
- package/dist/content/specialists/Especialista em Desenvolvimento Frontend.md +0 -477
- package/dist/content/specialists/Especialista em Desenvolvimento Mobile.md +0 -241
- package/dist/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +0 -417
- package/dist/content/specialists/Especialista em DevOps e Infraestrutura.md +0 -294
- package/dist/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +0 -227
- package/dist/content/specialists/Especialista em Engenharia de Requisitos com IA.md +0 -299
- package/dist/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +0 -179
- package/dist/content/specialists/Especialista em Gest/303/243o de Produto.md" +0 -179
- package/dist/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +0 -410
- package/dist/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +0 -248
- package/dist/content/specialists/Especialista em Observabilidade.md +0 -415
- package/dist/content/specialists/Especialista em Performance e Escalabilidade.md +0 -373
- package/dist/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +0 -341
- package/dist/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +0 -419
- package/dist/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +0 -508
- package/dist/content/specialists/Especialista em UX Design.md +0 -453
- package/dist/content/specialists/INDEX.md +0 -43
- package/dist/content/templates/PRD.md +0 -165
- package/dist/content/templates/README.md +0 -65
- package/dist/content/templates/adr.md +0 -103
- package/dist/content/templates/arquitetura.md +0 -279
- package/dist/content/templates/backlog.md +0 -185
- package/dist/content/templates/checklist-seguranca.md +0 -180
- package/dist/content/templates/contexto.md +0 -120
- package/dist/content/templates/criterios-aceite.md +0 -99
- package/dist/content/templates/design-banco.md +0 -270
- package/dist/content/templates/design-doc.md +0 -240
- package/dist/content/templates/feature.md +0 -88
- package/dist/content/templates/historia-backend.md +0 -84
- package/dist/content/templates/historia-frontend.md +0 -75
- package/dist/content/templates/historia-usuario.md +0 -125
- package/dist/content/templates/mapa-navegacao.md +0 -133
- package/dist/content/templates/matriz-rastreabilidade.md +0 -121
- package/dist/content/templates/modelo-dominio.md +0 -219
- package/dist/content/templates/plano-testes.md +0 -199
- package/dist/content/templates/prototipo-stitch.md +0 -138
- package/dist/content/templates/requisitos.md +0 -162
- package/dist/content/templates/slo-sli.md +0 -197
- /package/dist/content/{guides/Guia de Debugging com IA.md → skills/specialist-debugging-troubleshooting/resources/reference/debugging-ai-guide.md} +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/ddd-bounded-contexts.md +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/ddd-cqrs.md +0 -0
- /package/dist/content/{prompts/arquitetura → skills/specialist-modelagem-dominio/resources/prompts}/modelo-dominio.md +0 -0
|
@@ -0,0 +1,1024 @@
|
|
|
1
|
+
# Guia Técnico de Estratégia de Testes
|
|
2
|
+
|
|
3
|
+
## Visão Geral
|
|
4
|
+
|
|
5
|
+
Guia completo para implementação de estratégias modernas de testes, cobrindo desde planejamento inicial até automação avançada e monitoramento contínuo.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Capítulo 1: Fundamentos de Estratégia de Testes
|
|
10
|
+
|
|
11
|
+
### 1.1 Princípios da Pirâmide de Testes
|
|
12
|
+
|
|
13
|
+
#### Conceito
|
|
14
|
+
A pirâmide de testes é um modelo que distribui os tipos de teste baseado em velocidade, custo e confiabilidade:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/\ E2E Tests (10%)
|
|
18
|
+
/ \ Lentos, caros, frágeis
|
|
19
|
+
/----\ Testam fluxos completos
|
|
20
|
+
/ \ Experiência do usuário
|
|
21
|
+
/--------\
|
|
22
|
+
/ \ Integration Tests (20%)
|
|
23
|
+
/------------\ Média velocidade, custo moderado
|
|
24
|
+
/ \ Testam interações entre componentes
|
|
25
|
+
/----------------\ APIs, bancos, serviços
|
|
26
|
+
/------------------\
|
|
27
|
+
/ \ Unit Tests (70%)
|
|
28
|
+
/ \ Rápidos, baratos, confiáveis
|
|
29
|
+
/------------------------\ Testam unidades isoladas
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
#### Justificativa dos Percentuais
|
|
33
|
+
|
|
34
|
+
**70% Unitários:**
|
|
35
|
+
- Executam em milissegundos
|
|
36
|
+
- Isolados, sem dependências externas
|
|
37
|
+
- Identificam bugs rapidamente
|
|
38
|
+
- Facilitam refatoração segura
|
|
39
|
+
- Baixo custo de manutenção
|
|
40
|
+
|
|
41
|
+
**20% Integração:**
|
|
42
|
+
- Validam interações entre componentes
|
|
43
|
+
- Detectam problemas de comunicação
|
|
44
|
+
- Testam contratos de APIs
|
|
45
|
+
- Configurações de bancos e serviços
|
|
46
|
+
- Médio custo/benefício
|
|
47
|
+
|
|
48
|
+
**10% E2E:**
|
|
49
|
+
- Validam fluxos completos do usuário
|
|
50
|
+
- Testam integração real do sistema
|
|
51
|
+
- Caros e lentos de executar
|
|
52
|
+
- Frágeis e difíceis de debugar
|
|
53
|
+
- Alto valor para validação final
|
|
54
|
+
|
|
55
|
+
### 1.2 Fatores que Influenciam a Distribuição
|
|
56
|
+
|
|
57
|
+
| Fator | Impacto na Pirâmide | Exemplo de Ajuste |
|
|
58
|
+
|-------|-------------------|-------------------|
|
|
59
|
+
| **Complexidade do Sistema** | ↑ Integração, ↓ E2E | Microserviços: 60/30/10 |
|
|
60
|
+
| **Risco de Negócio** | ↑ E2E, ↑ Unitários | Financeiro: 80/15/5 |
|
|
61
|
+
| **Time-to-Market** | ↑ Unitários, ↓ E2E | Startup: 85/10/5 |
|
|
62
|
+
| **Regulamentação** | ↑ Integração, ↑ E2E | Saúde: 70/25/5 |
|
|
63
|
+
| **Maturidade da Equipe** | ↑ Todos os tipos | Senior: 60/30/10 |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Capítulo 2: Seleção de Ferramentas
|
|
68
|
+
|
|
69
|
+
### 2.1 Framework de Decisão
|
|
70
|
+
|
|
71
|
+
#### Critérios de Avaliação
|
|
72
|
+
|
|
73
|
+
| Critério | Peso | Descrição |
|
|
74
|
+
|----------|------|-----------|
|
|
75
|
+
| **Performance** | 25% | Velocidade de execução e resource usage |
|
|
76
|
+
| **Ecossistema** | 20% | Plugins, integrações, comunidade |
|
|
77
|
+
| **Curva de Aprendizado** | 15% | Facilidade para a equipe |
|
|
78
|
+
| **Manutenibilidade** | 20% | Facilidade de manter e evoluir |
|
|
79
|
+
| **Custo** | 10% | Licenciamento e infraestrutura |
|
|
80
|
+
| **Integração CI/CD** | 10% | Compatibilidade com pipeline |
|
|
81
|
+
|
|
82
|
+
#### Matriz de Decisão por Stack
|
|
83
|
+
|
|
84
|
+
### JavaScript/TypeScript
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
// Recomendação para React/Node.js
|
|
88
|
+
const testingStack = {
|
|
89
|
+
unit: {
|
|
90
|
+
framework: "Jest",
|
|
91
|
+
reasons: [
|
|
92
|
+
"Zero configuration required",
|
|
93
|
+
"Built-in mocking and coverage",
|
|
94
|
+
"Great TypeScript support",
|
|
95
|
+
"Large ecosystem and community"
|
|
96
|
+
],
|
|
97
|
+
alternatives: ["Vitest", "Mocha + Chai"],
|
|
98
|
+
setup: `
|
|
99
|
+
npm install --save-dev jest @types/jest ts-jest
|
|
100
|
+
npx ts-jest config:init
|
|
101
|
+
`
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
integration: {
|
|
105
|
+
framework: "Jest + Supertest",
|
|
106
|
+
reasons: [
|
|
107
|
+
"Consistent with unit tests",
|
|
108
|
+
"HTTP assertion library",
|
|
109
|
+
"Easy API testing"
|
|
110
|
+
],
|
|
111
|
+
alternatives: ["Mocha + Supertest", "Axios Mock Adapter"],
|
|
112
|
+
setup: `
|
|
113
|
+
npm install --save-dev supertest @types/supertest
|
|
114
|
+
`
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
e2e: {
|
|
118
|
+
framework: "Playwright",
|
|
119
|
+
reasons: [
|
|
120
|
+
"Cross-browser support",
|
|
121
|
+
"Auto-waits and retries",
|
|
122
|
+
"Great debugging tools",
|
|
123
|
+
"Parallel execution"
|
|
124
|
+
],
|
|
125
|
+
alternatives: ["Cypress", "Selenium"],
|
|
126
|
+
setup: `
|
|
127
|
+
npm install --save-dev @playwright/test
|
|
128
|
+
npx playwright install
|
|
129
|
+
`
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
performance: {
|
|
133
|
+
framework: "k6",
|
|
134
|
+
reasons: [
|
|
135
|
+
"Developer-friendly scripting",
|
|
136
|
+
"Great metrics and reporting",
|
|
137
|
+
"Cloud execution support",
|
|
138
|
+
"Load testing as code"
|
|
139
|
+
],
|
|
140
|
+
alternatives: ["Artillery", "JMeter"],
|
|
141
|
+
setup: `
|
|
142
|
+
npm install -g k6
|
|
143
|
+
`
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Python
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
# Recomendação para Django/FastAPI
|
|
152
|
+
testing_stack = {
|
|
153
|
+
"unit": {
|
|
154
|
+
"framework": "pytest",
|
|
155
|
+
"reasons": [
|
|
156
|
+
"Powerful fixtures system",
|
|
157
|
+
"Great plugin ecosystem",
|
|
158
|
+
"Detailed assertion messages",
|
|
159
|
+
"Easy parametrization"
|
|
160
|
+
],
|
|
161
|
+
"alternatives": ["unittest", "nose2"],
|
|
162
|
+
"setup": """
|
|
163
|
+
pip install pytest pytest-cov pytest-mock
|
|
164
|
+
"""
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
"integration": {
|
|
168
|
+
"framework": "pytest + testcontainers",
|
|
169
|
+
"reasons": [
|
|
170
|
+
"Real database testing",
|
|
171
|
+
"Docker containers isolation",
|
|
172
|
+
"Consistent with pytest",
|
|
173
|
+
"Production-like environment"
|
|
174
|
+
],
|
|
175
|
+
"alternatives": ["pytest + factory_boy", "Django test framework"],
|
|
176
|
+
"setup": """
|
|
177
|
+
pip install testcontainers pytest-docker
|
|
178
|
+
"""
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
"e2e": {
|
|
182
|
+
"framework": "Playwright Python",
|
|
183
|
+
"reasons": [
|
|
184
|
+
"Same API as JavaScript version",
|
|
185
|
+
"Great Python integration",
|
|
186
|
+
"Async/await support",
|
|
187
|
+
"Cross-language consistency"
|
|
188
|
+
],
|
|
189
|
+
"alternatives": ["Selenium + pytest", "Robot Framework"],
|
|
190
|
+
"setup": """
|
|
191
|
+
pip install pytest-playwright
|
|
192
|
+
playwright install
|
|
193
|
+
"""
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Java/Spring
|
|
199
|
+
|
|
200
|
+
```java
|
|
201
|
+
// Recomendação para Spring Boot
|
|
202
|
+
@Component
|
|
203
|
+
public class TestingStack {
|
|
204
|
+
|
|
205
|
+
// Unitários
|
|
206
|
+
@Bean
|
|
207
|
+
public TestingFramework unitFramework() {
|
|
208
|
+
return TestingFramework.builder()
|
|
209
|
+
.name("JUnit 5")
|
|
210
|
+
.reasons(Arrays.asList(
|
|
211
|
+
"Modern testing features",
|
|
212
|
+
"Great IDE support",
|
|
213
|
+
"Parameterized tests",
|
|
214
|
+
"Extension model"
|
|
215
|
+
))
|
|
216
|
+
.alternatives(Arrays.asList("TestNG", "JUnit 4"))
|
|
217
|
+
.build();
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Mocking
|
|
221
|
+
@Bean
|
|
222
|
+
public MockingFramework mockingFramework() {
|
|
223
|
+
return MockingFramework.builder()
|
|
224
|
+
.name("Mockito")
|
|
225
|
+
.reasons(Arrays.asList(
|
|
226
|
+
"Clean and simple API",
|
|
227
|
+
"Great verification features",
|
|
228
|
+
"Annotation support",
|
|
229
|
+
"Spring Boot Test integration"
|
|
230
|
+
))
|
|
231
|
+
.build();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Integração
|
|
235
|
+
@Bean
|
|
236
|
+
public IntegrationTestingFramework integrationFramework() {
|
|
237
|
+
return IntegrationTestingFramework.builder()
|
|
238
|
+
.name("Spring Boot Test")
|
|
239
|
+
.reasons(Arrays.asList(
|
|
240
|
+
"@SpringBootTest annotation",
|
|
241
|
+
"Testcontainers integration",
|
|
242
|
+
"Auto-configuration",
|
|
243
|
+
"Slice testing support"
|
|
244
|
+
))
|
|
245
|
+
.build();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Capítulo 3: Arquitetura de Testes
|
|
253
|
+
|
|
254
|
+
### 3.1 Estrutura de Diretórios
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
tests/
|
|
258
|
+
├── unit/ # Testes unitários isolados
|
|
259
|
+
│ ├── services/
|
|
260
|
+
│ │ ├── user.service.spec.ts
|
|
261
|
+
│ │ └── order.service.spec.ts
|
|
262
|
+
│ ├── repositories/
|
|
263
|
+
│ │ ├── user.repository.spec.ts
|
|
264
|
+
│ │ └── product.repository.spec.ts
|
|
265
|
+
│ └── utils/
|
|
266
|
+
│ ├── validation.spec.ts
|
|
267
|
+
│ └── formatting.spec.ts
|
|
268
|
+
├── integration/ # Testes de integração
|
|
269
|
+
│ ├── api/
|
|
270
|
+
│ │ ├── user.api.spec.ts
|
|
271
|
+
│ │ └── order.api.spec.ts
|
|
272
|
+
│ ├── database/
|
|
273
|
+
│ │ ├── user.repository.integration.spec.ts
|
|
274
|
+
│ │ └── migration.integration.spec.ts
|
|
275
|
+
│ └── external/
|
|
276
|
+
│ ├── payment.integration.spec.ts
|
|
277
|
+
│ └── notification.integration.spec.ts
|
|
278
|
+
├── e2e/ # Testes end-to-end
|
|
279
|
+
│ ├── user-flows/
|
|
280
|
+
│ │ ├── login.spec.ts
|
|
281
|
+
│ │ ├── registration.spec.ts
|
|
282
|
+
│ │ └── profile.spec.ts
|
|
283
|
+
│ ├── business-flows/
|
|
284
|
+
│ │ ├── purchase.spec.ts
|
|
285
|
+
│ │ ├── checkout.spec.ts
|
|
286
|
+
│ │ └── refund.spec.ts
|
|
287
|
+
│ └── admin-flows/
|
|
288
|
+
│ ├── user-management.spec.ts
|
|
289
|
+
│ └── reports.spec.ts
|
|
290
|
+
├── performance/ # Testes de performance
|
|
291
|
+
│ ├── load/
|
|
292
|
+
│ │ ├── api-load.js
|
|
293
|
+
│ │ └── database-load.js
|
|
294
|
+
│ ├── stress/
|
|
295
|
+
│ │ ├── peak-load.js
|
|
296
|
+
│ │ └── sustained-load.js
|
|
297
|
+
│ └── spike/
|
|
298
|
+
│ └── traffic-spike.js
|
|
299
|
+
├── security/ # Testes de segurança
|
|
300
|
+
│ ├── authentication.spec.ts
|
|
301
|
+
│ ├── authorization.spec.ts
|
|
302
|
+
│ ├── input-validation.spec.ts
|
|
303
|
+
│ └── owasp-tests.spec.ts
|
|
304
|
+
├── fixtures/ # Dados de teste
|
|
305
|
+
│ ├── users.json
|
|
306
|
+
│ ├── products.json
|
|
307
|
+
│ └── orders.json
|
|
308
|
+
├── helpers/ # Utilitários de teste
|
|
309
|
+
│ ├── database.helper.ts
|
|
310
|
+
│ ├── auth.helper.ts
|
|
311
|
+
│ └── api.helper.ts
|
|
312
|
+
└── config/ # Configurações
|
|
313
|
+
├── jest.config.js
|
|
314
|
+
├── playwright.config.ts
|
|
315
|
+
└── test-setup.ts
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### 3.2 Patterns de Teste
|
|
319
|
+
|
|
320
|
+
#### Pattern 1: Test Data Builder
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// test/builders/user.builder.ts
|
|
324
|
+
export class UserBuilder {
|
|
325
|
+
private user: Partial<User> = {};
|
|
326
|
+
|
|
327
|
+
static aUser(): UserBuilder {
|
|
328
|
+
return new UserBuilder();
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
withId(id: string): UserBuilder {
|
|
332
|
+
this.user.id = id;
|
|
333
|
+
return this;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
withEmail(email: string): UserBuilder {
|
|
337
|
+
this.user.email = email;
|
|
338
|
+
return this;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
withName(name: string): UserBuilder {
|
|
342
|
+
this.user.name = name;
|
|
343
|
+
return this;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
asAdmin(): UserBuilder {
|
|
347
|
+
this.user.role = 'ADMIN';
|
|
348
|
+
return this;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
build(): User {
|
|
352
|
+
return {
|
|
353
|
+
id: this.user.id || 'user_123',
|
|
354
|
+
email: this.user.email || 'test@example.com',
|
|
355
|
+
name: this.user.name || 'Test User',
|
|
356
|
+
role: this.user.role || 'USER',
|
|
357
|
+
createdAt: new Date(),
|
|
358
|
+
updatedAt: new Date()
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Uso nos testes
|
|
364
|
+
const user = UserBuilder.aUser()
|
|
365
|
+
.withEmail('admin@test.com')
|
|
366
|
+
.asAdmin()
|
|
367
|
+
.build();
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
#### Pattern 2: Page Object Model (E2E)
|
|
371
|
+
|
|
372
|
+
```typescript
|
|
373
|
+
// tests/e2e/pages/login.page.ts
|
|
374
|
+
export class LoginPage {
|
|
375
|
+
constructor(private page: Page) {}
|
|
376
|
+
|
|
377
|
+
async goto(): Promise<void> {
|
|
378
|
+
await this.page.goto('/login');
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
async login(email: string, password: string): Promise<void> {
|
|
382
|
+
await this.page.fill('[data-testid=email-input]', email);
|
|
383
|
+
await this.page.fill('[data-testid=password-input]', password);
|
|
384
|
+
await this.page.click('[data-testid=login-button]');
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
async getErrorMessage(): Promise<string> {
|
|
388
|
+
return await this.page.textContent('[data-testid=error-message]');
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
async isLoggedIn(): Promise<boolean> {
|
|
392
|
+
return await this.page.isVisible('[data-testid=user-menu]');
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// Uso nos testes
|
|
397
|
+
test('should login successfully', async ({ page }) => {
|
|
398
|
+
const loginPage = new LoginPage(page);
|
|
399
|
+
|
|
400
|
+
await loginPage.goto();
|
|
401
|
+
await loginPage.login('user@test.com', 'password');
|
|
402
|
+
|
|
403
|
+
expect(await loginPage.isLoggedIn()).toBe(true);
|
|
404
|
+
});
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
#### Pattern 3: Test Containers
|
|
408
|
+
|
|
409
|
+
```python
|
|
410
|
+
# tests/conftest.py
|
|
411
|
+
import pytest
|
|
412
|
+
from testcontainers.postgres import PostgresContainer
|
|
413
|
+
from testcontainers.redis import RedisContainer
|
|
414
|
+
|
|
415
|
+
@pytest.fixture(scope="session")
|
|
416
|
+
def postgres_container():
|
|
417
|
+
with PostgresContainer("postgres:13") as postgres:
|
|
418
|
+
yield postgres
|
|
419
|
+
|
|
420
|
+
@pytest.fixture(scope="session")
|
|
421
|
+
def redis_container():
|
|
422
|
+
with RedisContainer("redis:6") as redis:
|
|
423
|
+
yield redis
|
|
424
|
+
|
|
425
|
+
@pytest.fixture(scope="function")
|
|
426
|
+
def test_db(postgres_container):
|
|
427
|
+
engine = create_engine(postgres_container.get_connection_url())
|
|
428
|
+
Base.metadata.create_all(engine)
|
|
429
|
+
yield engine
|
|
430
|
+
Base.metadata.drop_all(engine)
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Capítulo 4: Automação e Pipeline
|
|
436
|
+
|
|
437
|
+
### 4.1 Estrutura de Pipeline CI/CD
|
|
438
|
+
|
|
439
|
+
```yaml
|
|
440
|
+
# .github/workflows/testing.yml
|
|
441
|
+
name: Testing Pipeline
|
|
442
|
+
|
|
443
|
+
on:
|
|
444
|
+
push:
|
|
445
|
+
branches: [main, develop]
|
|
446
|
+
pull_request:
|
|
447
|
+
branches: [main]
|
|
448
|
+
|
|
449
|
+
jobs:
|
|
450
|
+
unit-tests:
|
|
451
|
+
runs-on: ubuntu-latest
|
|
452
|
+
strategy:
|
|
453
|
+
matrix:
|
|
454
|
+
node-version: [16.x, 18.x]
|
|
455
|
+
|
|
456
|
+
steps:
|
|
457
|
+
- uses: actions/checkout@v3
|
|
458
|
+
|
|
459
|
+
- name: Setup Node.js
|
|
460
|
+
uses: actions/setup-node@v3
|
|
461
|
+
with:
|
|
462
|
+
node-version: ${{ matrix.node-version }}
|
|
463
|
+
cache: 'npm'
|
|
464
|
+
|
|
465
|
+
- name: Install dependencies
|
|
466
|
+
run: npm ci
|
|
467
|
+
|
|
468
|
+
- name: Run unit tests
|
|
469
|
+
run: |
|
|
470
|
+
npm run test:unit -- --coverage --watchAll=false
|
|
471
|
+
npm run test:coverage:report
|
|
472
|
+
|
|
473
|
+
- name: Upload coverage
|
|
474
|
+
uses: codecov/codecov-action@v3
|
|
475
|
+
with:
|
|
476
|
+
file: ./coverage/lcov.info
|
|
477
|
+
|
|
478
|
+
integration-tests:
|
|
479
|
+
runs-on: ubuntu-latest
|
|
480
|
+
services:
|
|
481
|
+
postgres:
|
|
482
|
+
image: postgres:13
|
|
483
|
+
env:
|
|
484
|
+
POSTGRES_PASSWORD: test
|
|
485
|
+
POSTGRES_DB: testdb
|
|
486
|
+
options: >-
|
|
487
|
+
--health-cmd pg_isready
|
|
488
|
+
--health-interval 10s
|
|
489
|
+
--health-timeout 5s
|
|
490
|
+
--health-retries 5
|
|
491
|
+
|
|
492
|
+
redis:
|
|
493
|
+
image: redis:6
|
|
494
|
+
options: >-
|
|
495
|
+
--health-cmd "redis-cli ping"
|
|
496
|
+
--health-interval 10s
|
|
497
|
+
--health-timeout 5s
|
|
498
|
+
--health-retries 5
|
|
499
|
+
|
|
500
|
+
steps:
|
|
501
|
+
- uses: actions/checkout@v3
|
|
502
|
+
|
|
503
|
+
- name: Setup Node.js
|
|
504
|
+
uses: actions/setup-node@v3
|
|
505
|
+
with:
|
|
506
|
+
node-version: 18.x
|
|
507
|
+
cache: 'npm'
|
|
508
|
+
|
|
509
|
+
- name: Install dependencies
|
|
510
|
+
run: npm ci
|
|
511
|
+
|
|
512
|
+
- name: Run integration tests
|
|
513
|
+
run: npm run test:integration
|
|
514
|
+
env:
|
|
515
|
+
DATABASE_URL: postgresql://postgres:test@localhost:5432/testdb
|
|
516
|
+
REDIS_URL: redis://localhost:6379
|
|
517
|
+
|
|
518
|
+
e2e-tests:
|
|
519
|
+
runs-on: ubuntu-latest
|
|
520
|
+
steps:
|
|
521
|
+
- uses: actions/checkout@v3
|
|
522
|
+
|
|
523
|
+
- name: Setup Node.js
|
|
524
|
+
uses: actions/setup-node@v3
|
|
525
|
+
with:
|
|
526
|
+
node-version: 18.x
|
|
527
|
+
cache: 'npm'
|
|
528
|
+
|
|
529
|
+
- name: Install dependencies
|
|
530
|
+
run: npm ci
|
|
531
|
+
|
|
532
|
+
- name: Install Playwright
|
|
533
|
+
run: npx playwright install --with-deps
|
|
534
|
+
|
|
535
|
+
- name: Build application
|
|
536
|
+
run: npm run build
|
|
537
|
+
|
|
538
|
+
- name: Start application
|
|
539
|
+
run: npm run start:test &
|
|
540
|
+
wait-on http://localhost:3000
|
|
541
|
+
|
|
542
|
+
- name: Run E2E tests
|
|
543
|
+
run: npx playwright test
|
|
544
|
+
|
|
545
|
+
- name: Upload test results
|
|
546
|
+
uses: actions/upload-artifact@v3
|
|
547
|
+
if: always()
|
|
548
|
+
with:
|
|
549
|
+
name: playwright-report
|
|
550
|
+
path: playwright-report/
|
|
551
|
+
|
|
552
|
+
performance-tests:
|
|
553
|
+
runs-on: ubuntu-latest
|
|
554
|
+
if: github.ref == 'refs/heads/main'
|
|
555
|
+
steps:
|
|
556
|
+
- uses: actions/checkout@v3
|
|
557
|
+
|
|
558
|
+
- name: Setup k6
|
|
559
|
+
run: |
|
|
560
|
+
sudo gpg -k
|
|
561
|
+
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
|
|
562
|
+
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
|
|
563
|
+
sudo apt-get update
|
|
564
|
+
sudo apt-get install k6
|
|
565
|
+
|
|
566
|
+
- name: Run performance tests
|
|
567
|
+
run: k6 run tests/performance/api-load.js
|
|
568
|
+
|
|
569
|
+
- name: Upload performance results
|
|
570
|
+
uses: actions/upload-artifact@v3
|
|
571
|
+
with:
|
|
572
|
+
name: performance-results
|
|
573
|
+
path: performance-results.json
|
|
574
|
+
|
|
575
|
+
security-tests:
|
|
576
|
+
runs-on: ubuntu-latest
|
|
577
|
+
steps:
|
|
578
|
+
- uses: actions/checkout@v3
|
|
579
|
+
|
|
580
|
+
- name: Run security audit
|
|
581
|
+
run: npm audit --audit-level high
|
|
582
|
+
|
|
583
|
+
- name: Run SAST scan
|
|
584
|
+
uses: github/super-linter@v4
|
|
585
|
+
env:
|
|
586
|
+
DEFAULT_BRANCH: main
|
|
587
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
588
|
+
VALIDATE_JAVASCRIPT_ES: true
|
|
589
|
+
VALIDATE_TYPESCRIPT_ES: true
|
|
590
|
+
|
|
591
|
+
- name: Run dependency check
|
|
592
|
+
run: npx audit-ci --moderate
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### 4.2 Quality Gates Automatizados
|
|
596
|
+
|
|
597
|
+
```typescript
|
|
598
|
+
// scripts/quality-gates.ts
|
|
599
|
+
interface QualityMetrics {
|
|
600
|
+
coverage: number;
|
|
601
|
+
passRate: number;
|
|
602
|
+
performance: number;
|
|
603
|
+
security: number;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
interface QualityGate {
|
|
607
|
+
name: string;
|
|
608
|
+
threshold: number;
|
|
609
|
+
weight: number;
|
|
610
|
+
metrics: keyof QualityMetrics;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
const qualityGates: QualityGate[] = [
|
|
614
|
+
{
|
|
615
|
+
name: 'Code Coverage',
|
|
616
|
+
threshold: 80,
|
|
617
|
+
weight: 0.3,
|
|
618
|
+
metrics: 'coverage'
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
name: 'Test Pass Rate',
|
|
622
|
+
threshold: 95,
|
|
623
|
+
weight: 0.2,
|
|
624
|
+
metrics: 'passRate'
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
name: 'Performance Score',
|
|
628
|
+
threshold: 90,
|
|
629
|
+
weight: 0.3,
|
|
630
|
+
metrics: 'performance'
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
name: 'Security Score',
|
|
634
|
+
threshold: 85,
|
|
635
|
+
weight: 0.2,
|
|
636
|
+
metrics: 'security'
|
|
637
|
+
}
|
|
638
|
+
];
|
|
639
|
+
|
|
640
|
+
export function calculateQualityScore(metrics: QualityMetrics): number {
|
|
641
|
+
let totalScore = 0;
|
|
642
|
+
let totalWeight = 0;
|
|
643
|
+
|
|
644
|
+
for (const gate of qualityGates) {
|
|
645
|
+
const metricValue = metrics[gate.metrics];
|
|
646
|
+
const gateScore = Math.min(metricValue / gate.threshold * 100, 100);
|
|
647
|
+
|
|
648
|
+
totalScore += gateScore * gate.weight;
|
|
649
|
+
totalWeight += gate.weight;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
return totalScore / totalWeight;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
export function validateQualityGates(metrics: QualityMetrics): {
|
|
656
|
+
passed: boolean;
|
|
657
|
+
score: number;
|
|
658
|
+
failedGates: string[];
|
|
659
|
+
} {
|
|
660
|
+
const score = calculateQualityScore(metrics);
|
|
661
|
+
const failedGates: string[] = [];
|
|
662
|
+
|
|
663
|
+
for (const gate of qualityGates) {
|
|
664
|
+
if (metrics[gate.metrics] < gate.threshold) {
|
|
665
|
+
failedGates.push(gate.name);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
return {
|
|
670
|
+
passed: failedGates.length === 0 && score >= 75,
|
|
671
|
+
score,
|
|
672
|
+
failedGates
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## Capítulo 5: Monitoramento e Métricas
|
|
680
|
+
|
|
681
|
+
### 5.1 Dashboard de Qualidade
|
|
682
|
+
|
|
683
|
+
```typescript
|
|
684
|
+
// monitoring/quality-dashboard.ts
|
|
685
|
+
export interface QualityMetrics {
|
|
686
|
+
timestamp: Date;
|
|
687
|
+
coverage: {
|
|
688
|
+
overall: number;
|
|
689
|
+
statements: number;
|
|
690
|
+
branches: number;
|
|
691
|
+
functions: number;
|
|
692
|
+
lines: number;
|
|
693
|
+
};
|
|
694
|
+
tests: {
|
|
695
|
+
total: number;
|
|
696
|
+
passed: number;
|
|
697
|
+
failed: number;
|
|
698
|
+
skipped: number;
|
|
699
|
+
passRate: number;
|
|
700
|
+
duration: number;
|
|
701
|
+
};
|
|
702
|
+
performance: {
|
|
703
|
+
avgResponseTime: number;
|
|
704
|
+
p95ResponseTime: number;
|
|
705
|
+
p99ResponseTime: number;
|
|
706
|
+
throughput: number;
|
|
707
|
+
errorRate: number;
|
|
708
|
+
};
|
|
709
|
+
security: {
|
|
710
|
+
vulnerabilities: {
|
|
711
|
+
critical: number;
|
|
712
|
+
high: number;
|
|
713
|
+
medium: number;
|
|
714
|
+
low: number;
|
|
715
|
+
};
|
|
716
|
+
codeQuality: number;
|
|
717
|
+
};
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
export class QualityMonitor {
|
|
721
|
+
private metrics: QualityMetrics[] = [];
|
|
722
|
+
|
|
723
|
+
addMetrics(metrics: QualityMetrics): void {
|
|
724
|
+
this.metrics.push(metrics);
|
|
725
|
+
this.saveToDatabase(metrics);
|
|
726
|
+
this.updateDashboard(metrics);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
getTrends(days: number): QualityMetrics[] {
|
|
730
|
+
const cutoff = new Date();
|
|
731
|
+
cutoff.setDate(cutoff.getDate() - days);
|
|
732
|
+
|
|
733
|
+
return this.metrics.filter(m => m.timestamp >= cutoff);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
generateReport(): string {
|
|
737
|
+
const latest = this.metrics[this.metrics.length - 1];
|
|
738
|
+
const trends = this.getTrends(7);
|
|
739
|
+
|
|
740
|
+
return `
|
|
741
|
+
# Quality Report - ${latest.timestamp.toISOString()}
|
|
742
|
+
|
|
743
|
+
## Overall Score: ${this.calculateScore(latest)}/100
|
|
744
|
+
|
|
745
|
+
### Coverage
|
|
746
|
+
- Overall: ${latest.coverage.overall}%
|
|
747
|
+
- Statements: ${latest.coverage.statements}%
|
|
748
|
+
- Branches: ${latest.coverage.branches}%
|
|
749
|
+
|
|
750
|
+
### Tests
|
|
751
|
+
- Total: ${latest.tests.total}
|
|
752
|
+
- Pass Rate: ${latest.tests.passRate}%
|
|
753
|
+
- Duration: ${latest.tests.duration}ms
|
|
754
|
+
|
|
755
|
+
### Performance
|
|
756
|
+
- Avg Response: ${latest.performance.avgResponseTime}ms
|
|
757
|
+
- P95 Response: ${latest.performance.p95ResponseTime}ms
|
|
758
|
+
- Error Rate: ${latest.performance.errorRate}%
|
|
759
|
+
|
|
760
|
+
### Security
|
|
761
|
+
- Critical Vulnerabilities: ${latest.security.vulnerabilities.critical}
|
|
762
|
+
- Code Quality: ${latest.security.codeQuality}
|
|
763
|
+
|
|
764
|
+
## 7-Day Trends
|
|
765
|
+
${this.generateTrendSection(trends)}
|
|
766
|
+
`;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
private calculateScore(metrics: QualityMetrics): number {
|
|
770
|
+
const coverageScore = metrics.coverage.overall;
|
|
771
|
+
const testScore = metrics.tests.passRate;
|
|
772
|
+
const performanceScore = Math.max(0, 100 - (metrics.performance.p95ResponseTime / 10));
|
|
773
|
+
const securityScore = Math.max(0, 100 - (latest.security.vulnerabilities.critical * 20));
|
|
774
|
+
|
|
775
|
+
return (coverageScore + testScore + performanceScore + securityScore) / 4;
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
### 5.2 Alertas e Notificações
|
|
781
|
+
|
|
782
|
+
```typescript
|
|
783
|
+
// monitoring/alerts.ts
|
|
784
|
+
export interface AlertRule {
|
|
785
|
+
name: string;
|
|
786
|
+
condition: (metrics: QualityMetrics) => boolean;
|
|
787
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
788
|
+
message: (metrics: QualityMetrics) => string;
|
|
789
|
+
channels: ('slack' | 'email' | 'teams')[];
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
export const alertRules: AlertRule[] = [
|
|
793
|
+
{
|
|
794
|
+
name: 'Low Coverage',
|
|
795
|
+
condition: (m) => m.coverage.overall < 75,
|
|
796
|
+
severity: 'high',
|
|
797
|
+
message: (m) => `Code coverage dropped to ${m.coverage.overall}% (target: 80%)`,
|
|
798
|
+
channels: ['slack', 'email']
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
name: 'High Failure Rate',
|
|
802
|
+
condition: (m) => m.tests.passRate < 90,
|
|
803
|
+
severity: 'critical',
|
|
804
|
+
message: (m) => `Test pass rate is ${m.tests.passRate}% (${m.tests.failed} tests failing)`,
|
|
805
|
+
channels: ['slack', 'email', 'teams']
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
name: 'Performance Degradation',
|
|
809
|
+
condition: (m) => m.performance.p95ResponseTime > 500,
|
|
810
|
+
severity: 'medium',
|
|
811
|
+
message: (m) => `P95 response time is ${m.performance.p95ResponseTime}ms (target: <200ms)`,
|
|
812
|
+
channels: ['slack']
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
name: 'Security Vulnerability',
|
|
816
|
+
condition: (m) => m.security.vulnerabilities.critical > 0,
|
|
817
|
+
severity: 'critical',
|
|
818
|
+
message: (m) => `${m.security.vulnerabilities.critical} critical security vulnerabilities found`,
|
|
819
|
+
channels: ['slack', 'email', 'teams']
|
|
820
|
+
}
|
|
821
|
+
];
|
|
822
|
+
|
|
823
|
+
export class AlertManager {
|
|
824
|
+
async checkAlerts(metrics: QualityMetrics): Promise<void> {
|
|
825
|
+
for (const rule of alertRules) {
|
|
826
|
+
if (rule.condition(metrics)) {
|
|
827
|
+
await this.sendAlert(rule, metrics);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
private async sendAlert(rule: AlertRule, metrics: QualityMetrics): Promise<void> {
|
|
833
|
+
const message = rule.message(metrics);
|
|
834
|
+
|
|
835
|
+
for (const channel of rule.channels) {
|
|
836
|
+
switch (channel) {
|
|
837
|
+
case 'slack':
|
|
838
|
+
await this.sendSlackAlert(rule.severity, message);
|
|
839
|
+
break;
|
|
840
|
+
case 'email':
|
|
841
|
+
await this.sendEmailAlert(rule.severity, message);
|
|
842
|
+
break;
|
|
843
|
+
case 'teams':
|
|
844
|
+
await this.sendTeamsAlert(rule.severity, message);
|
|
845
|
+
break;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
private async sendSlackAlert(severity: string, message: string): Promise<void> {
|
|
851
|
+
const webhook = process.env.SLACK_WEBHOOK_URL;
|
|
852
|
+
const color = this.getSeverityColor(severity);
|
|
853
|
+
|
|
854
|
+
await fetch(webhook, {
|
|
855
|
+
method: 'POST',
|
|
856
|
+
headers: { 'Content-Type': 'application/json' },
|
|
857
|
+
body: JSON.stringify({
|
|
858
|
+
attachments: [{
|
|
859
|
+
color,
|
|
860
|
+
text: message,
|
|
861
|
+
fields: [{
|
|
862
|
+
title: 'Severity',
|
|
863
|
+
value: severity.toUpperCase(),
|
|
864
|
+
short: true
|
|
865
|
+
}, {
|
|
866
|
+
title: 'Time',
|
|
867
|
+
value: new Date().toISOString(),
|
|
868
|
+
short: true
|
|
869
|
+
}]
|
|
870
|
+
}]
|
|
871
|
+
})
|
|
872
|
+
});
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
private getSeverityColor(severity: string): string {
|
|
876
|
+
const colors = {
|
|
877
|
+
low: 'good',
|
|
878
|
+
medium: 'warning',
|
|
879
|
+
high: 'danger',
|
|
880
|
+
critical: '#ff0000'
|
|
881
|
+
};
|
|
882
|
+
return colors[severity] || 'good';
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
---
|
|
888
|
+
|
|
889
|
+
## Capítulo 6: Boas Práticas e Padrões
|
|
890
|
+
|
|
891
|
+
### 6.1 Princípios FIRST
|
|
892
|
+
|
|
893
|
+
- **Fast:** Testes devem executar rapidamente
|
|
894
|
+
- **Independent:** Testes não devem depender uns dos outros
|
|
895
|
+
- **Repeatable:** Testes devem produzir os mesmos resultados
|
|
896
|
+
- **Self-Validating:** Testes devem ter pass/fail claro
|
|
897
|
+
- **Timely:** Testes devem ser escritos no momento certo
|
|
898
|
+
|
|
899
|
+
### 6.2 Anti-Patterns Comuns
|
|
900
|
+
|
|
901
|
+
| Anti-Pattern | Problema | Solução |
|
|
902
|
+
|--------------|----------|---------|
|
|
903
|
+
| **Testes que dependem de ordem** | Frágeis e não determinísticos | Isolar testes, usar setup/teardown |
|
|
904
|
+
| **Testes muito longos** | Difíceis de debugar | Dividir em testes menores |
|
|
905
|
+
| **Mock excessivo** | Testes não validam comportamento real | Usar testes de integração |
|
|
906
|
+
| **Testes de implementação** | Quebram com refatoração | Testar comportamento, não código |
|
|
907
|
+
| **Dados de teste hardcoded** | Manutenção difícil | Usar factories e builders |
|
|
908
|
+
|
|
909
|
+
### 6.3 Code Review Checklist
|
|
910
|
+
|
|
911
|
+
#### Para Testes Unitários
|
|
912
|
+
- [ ] Testa apenas uma unidade de código
|
|
913
|
+
- [ ] Usa mocks/stubs apropriadamente
|
|
914
|
+
- [ ] Nomes descritivos (deveria, quando, então)
|
|
915
|
+
- [ ] AAA pattern claro
|
|
916
|
+
- [ ] Edge cases cobertos
|
|
917
|
+
- [ ] Sem dependências externas
|
|
918
|
+
|
|
919
|
+
#### Para Testes de Integração
|
|
920
|
+
- [ ] Ambiente isolado (containers)
|
|
921
|
+
- [ ] Dados de teste consistentes
|
|
922
|
+
- [ ] Limpeza após execução
|
|
923
|
+
- [ ] Contratos validados
|
|
924
|
+
- [ ] Performance aceitável
|
|
925
|
+
|
|
926
|
+
#### Para Testes E2E
|
|
927
|
+
- [ ] Fluxos de usuário reais
|
|
928
|
+
- [ ] Seletores robustos (data-testid)
|
|
929
|
+
- [ ] Esperas explícitas
|
|
930
|
+
- [ ] Screenshots em falhas
|
|
931
|
+
- [ ] Paralelização configurada
|
|
932
|
+
|
|
933
|
+
---
|
|
934
|
+
|
|
935
|
+
## Capítulo 7: Troubleshooting e Debugging
|
|
936
|
+
|
|
937
|
+
### 7.1 Problemas Comuns
|
|
938
|
+
|
|
939
|
+
#### Testes Flaky
|
|
940
|
+
|
|
941
|
+
**Causas:**
|
|
942
|
+
- Race conditions
|
|
943
|
+
- Timing issues
|
|
944
|
+
- Dependências externas
|
|
945
|
+
- Recursos não limpos
|
|
946
|
+
|
|
947
|
+
**Soluções:**
|
|
948
|
+
```typescript
|
|
949
|
+
// Usar waits explícitos
|
|
950
|
+
await expect(page.locator('[data-testid=result]')).toBeVisible({
|
|
951
|
+
timeout: 5000
|
|
952
|
+
});
|
|
953
|
+
|
|
954
|
+
// Retry com backoff
|
|
955
|
+
const retry = async (fn, times = 3) => {
|
|
956
|
+
for (let i = 0; i < times; i++) {
|
|
957
|
+
try {
|
|
958
|
+
return await fn();
|
|
959
|
+
} catch (error) {
|
|
960
|
+
if (i === times - 1) throw error;
|
|
961
|
+
await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, i)));
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
};
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
#### Performance Lenta
|
|
968
|
+
|
|
969
|
+
**Otimizações:**
|
|
970
|
+
```typescript
|
|
971
|
+
// Parallel test execution
|
|
972
|
+
jest.config.js = {
|
|
973
|
+
maxWorkers: 4,
|
|
974
|
+
testTimeout: 10000
|
|
975
|
+
};
|
|
976
|
+
|
|
977
|
+
// Cache de dependências
|
|
978
|
+
beforeAll(async () => {
|
|
979
|
+
await setupTestDatabase();
|
|
980
|
+
});
|
|
981
|
+
|
|
982
|
+
// Lazy loading de dados
|
|
983
|
+
const getTestData = lazy(() => import('./test-data'));
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
#### Memory Leaks
|
|
987
|
+
|
|
988
|
+
**Prevenção:**
|
|
989
|
+
```typescript
|
|
990
|
+
afterEach(() => {
|
|
991
|
+
// Limpar mocks
|
|
992
|
+
jest.clearAllMocks();
|
|
993
|
+
|
|
994
|
+
// Fechar conexões
|
|
995
|
+
if (database) {
|
|
996
|
+
await database.close();
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
// Limpar DOM
|
|
1000
|
+
document.body.innerHTML = '';
|
|
1001
|
+
});
|
|
1002
|
+
```
|
|
1003
|
+
|
|
1004
|
+
---
|
|
1005
|
+
|
|
1006
|
+
## Conclusão
|
|
1007
|
+
|
|
1008
|
+
Implementar uma estratégia de testes eficaz é um investimento contínuo que paga dividendos em qualidade, confiança e velocidade de entrega. Os princípios e padrões apresentados neste guia fornecem uma base sólida para construir uma cultura de qualidade sustentável.
|
|
1009
|
+
|
|
1010
|
+
### Próximos Passos
|
|
1011
|
+
|
|
1012
|
+
1. **Avaliar maturidade atual** da estratégia de testes
|
|
1013
|
+
2. **Definir roadmap** de melhorias baseado nos gaps
|
|
1014
|
+
3. **Implementar incrementalmente** começando pelos críticos
|
|
1015
|
+
4. **Medir e monitorar** progresso continuamente
|
|
1016
|
+
5. **Ajustar e evoluir** baseado em aprendizados
|
|
1017
|
+
|
|
1018
|
+
### Recursos Adicionais
|
|
1019
|
+
|
|
1020
|
+
- [Testing Pyramid Blog Post](https://martinfowler.com/articles/practical-test-pyramid.html)
|
|
1021
|
+
- [Google Testing Blog](https://testing.googleblog.com/)
|
|
1022
|
+
- [Software Testing Fundamentals](https://www.guru99.com/software-testing-introduction.html)
|
|
1023
|
+
|
|
1024
|
+
Lembre-se: **Testes não são um custo, são um investimento na qualidade e sustentabilidade do seu software.**
|