@umacloud/knowledge 1.0.1

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 (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,718 @@
1
+ ---
2
+ id: testing-antipatterns
3
+ title: 测试反模式指南 (Testing Anti-Patterns Guide)
4
+ domain: testing
5
+ category: 04-antipatterns
6
+ difficulty: intermediate
7
+ tags: [antipatterns, behavior, excessive, implementation, mock, mocking, testing, 反模式]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # 测试反模式指南 (Testing Anti-Patterns Guide)
12
+
13
+ > 适用范围:Python / JavaScript / TypeScript / Go / Java
14
+ > 约束级别:SHALL(必须在 Code Review 阶段拦截)
15
+ > 目标:识别和消除常见的测试反模式,建设高质量、可维护的测试体系。
16
+
17
+ ---
18
+
19
+ ## 反模式 1: 测试实现而非行为 (Testing Implementation, Not Behavior)
20
+
21
+ ### 描述
22
+
23
+ 测试过度依赖代码内部结构(私有方法、字段顺序、调用次数),而非验证外部可观察的行为。一旦重构实现细节,大量测试会断裂,即使功能完全正确。
24
+
25
+ ### 危害
26
+
27
+ - 重构成本极高,开发者害怕修改代码
28
+ - 测试无法捕获真正的回归 Bug
29
+ - 测试维护成本远超业务代码
30
+
31
+ ### 错误示例
32
+
33
+ ```python
34
+ # BAD: 测试内部实现细节
35
+ def test_calculate_discount():
36
+ service = PricingService()
37
+ service.calculate_discount(user_id=1, amount=100)
38
+
39
+ # 断言内部调用了特定的私有方法和参数
40
+ service._load_user_tier.assert_called_once_with(1)
41
+ service._apply_tier_multiplier.assert_called_once_with("gold", 100)
42
+ service._round_to_cents.assert_called_once()
43
+ # 没有断言最终结果!
44
+ ```
45
+
46
+ ### 正确示例
47
+
48
+ ```python
49
+ # GOOD: 测试可观察的行为(输入 → 输出)
50
+ def test_gold_user_gets_20_percent_discount():
51
+ service = PricingService(user_repo=FakeUserRepo(tier="gold"))
52
+ result = service.calculate_discount(user_id=1, amount=100)
53
+
54
+ assert result.discount_amount == 20.00
55
+ assert result.final_price == 80.00
56
+ ```
57
+
58
+ ### 检测方法
59
+
60
+ - 测试中 `assert_called_with` 数量 > `assert` 结果断言数量
61
+ - 测试访问了以 `_` 开头的私有属性或方法
62
+ - 重构后功能正常但测试失败
63
+
64
+ ---
65
+
66
+ ## 反模式 2: 过度 Mock (Excessive Mocking)
67
+
68
+ ### 描述
69
+
70
+ 对几乎所有依赖都使用 Mock,导致测试仅验证 Mock 的配置是否正确,而非系统的真实行为。测试通过但实际集成时仍然出错。
71
+
72
+ ### 危害
73
+
74
+ - 测试与真实行为脱节,提供虚假的安全感
75
+ - Mock 配置本身成为 Bug 来源
76
+ - 无法捕获依赖变更引起的集成问题
77
+
78
+ ### 错误示例
79
+
80
+ ```python
81
+ # BAD: Mock 了一切,测试只验证了 Mock 的配置
82
+ def test_create_order(mocker):
83
+ mock_db = mocker.patch("app.services.database")
84
+ mock_cache = mocker.patch("app.services.cache")
85
+ mock_queue = mocker.patch("app.services.message_queue")
86
+ mock_validator = mocker.patch("app.services.validator")
87
+
88
+ mock_validator.validate.return_value = True
89
+ mock_db.insert.return_value = {"id": "order-123"}
90
+ mock_cache.set.return_value = True
91
+ mock_queue.publish.return_value = True
92
+
93
+ service = OrderService()
94
+ result = service.create_order({"item": "book", "qty": 1})
95
+
96
+ mock_validator.validate.assert_called_once()
97
+ mock_db.insert.assert_called_once()
98
+ mock_cache.set.assert_called_once()
99
+ mock_queue.publish.assert_called_once()
100
+ # 测试通过,但实际 DB schema 变了、队列消息格式变了都不会被发现
101
+ ```
102
+
103
+ ### 正确示例
104
+
105
+ ```python
106
+ # GOOD: 仅 Mock 外部边界(网络/第三方API),内部逻辑用真实实现
107
+ def test_create_order():
108
+ # 使用内存数据库和 Fake 实现
109
+ db = InMemoryDatabase()
110
+ cache = InMemoryCache()
111
+ queue = FakeMessageQueue()
112
+
113
+ service = OrderService(db=db, cache=cache, queue=queue)
114
+ result = service.create_order({"item": "book", "qty": 1})
115
+
116
+ assert result.status == "created"
117
+ assert db.find("orders", result.id) is not None
118
+ assert len(queue.messages) == 1
119
+ assert queue.messages[0]["type"] == "order_created"
120
+ ```
121
+
122
+ ### 检测方法
123
+
124
+ - 单个测试函数中 `mocker.patch` 调用 > 3 次
125
+ - 测试文件中 Mock 配置代码行数 > 断言代码行数
126
+ - Mock 返回值从不为 None 或异常(只测试 Happy Path)
127
+
128
+ ---
129
+
130
+ ## 反模式 3: Flaky Tests(不稳定测试)
131
+
132
+ ### 描述
133
+
134
+ 测试在相同代码上时而通过时而失败,通常由时间依赖、随机性、外部服务调用、竞态条件或测试执行顺序依赖引起。
135
+
136
+ ### 危害
137
+
138
+ - 团队对测试结果失去信任,开始忽视失败
139
+ - CI 流水线不可靠,频繁 Retry 浪费资源
140
+ - 真正的 Bug 被淹没在 Flaky 噪音中
141
+
142
+ ### 错误示例
143
+
144
+ ```python
145
+ # BAD: 依赖当前时间
146
+ def test_greeting_message():
147
+ service = GreetingService()
148
+ result = service.get_greeting()
149
+ # 在下午 6 点前通过,之后失败
150
+ assert result == "Good morning!"
151
+
152
+
153
+ # BAD: 依赖外部 API
154
+ def test_exchange_rate():
155
+ rate = get_exchange_rate("USD", "CNY")
156
+ assert rate == 7.24 # 汇率每天变化
157
+
158
+
159
+ # BAD: 依赖字典/集合顺序
160
+ def test_user_roles():
161
+ user = create_admin_user()
162
+ assert str(user.roles) == "{'admin', 'user'}" # 集合顺序不确定
163
+ ```
164
+
165
+ ### 正确示例
166
+
167
+ ```python
168
+ # GOOD: 注入可控的时间源
169
+ def test_greeting_message():
170
+ clock = FakeClock(hour=9)
171
+ service = GreetingService(clock=clock)
172
+ result = service.get_greeting()
173
+ assert result == "Good morning!"
174
+
175
+
176
+ # GOOD: Mock 外部调用,测试逻辑而非数据
177
+ def test_exchange_rate_conversion(mocker):
178
+ mocker.patch("app.forex.get_exchange_rate", return_value=7.24)
179
+ result = convert_currency(100, "USD", "CNY")
180
+ assert result == 724.0
181
+
182
+
183
+ # GOOD: 不依赖集合顺序
184
+ def test_user_roles():
185
+ user = create_admin_user()
186
+ assert user.roles == {"admin", "user"} # 集合相等比较,不关心顺序
187
+ ```
188
+
189
+ ### 检测方法
190
+
191
+ - 同一测试在 CI 中最近 10 次运行有失败记录
192
+ - 测试中使用 `time.sleep()` / `datetime.now()` / `random`
193
+ - 测试直接调用外部 HTTP 接口
194
+
195
+ ---
196
+
197
+ ## 反模式 4: 测试间依赖 (Inter-Test Dependency)
198
+
199
+ ### 描述
200
+
201
+ 测试之间存在隐式的执行顺序依赖或共享可变状态,导致单独运行某个测试通过,但改变执行顺序或并行运行时失败。
202
+
203
+ ### 危害
204
+
205
+ - 无法并行执行测试,CI 时间线性增长
206
+ - 新增/删除一个测试可能导致其他测试失败
207
+ - 排查失败原因极其困难
208
+
209
+ ### 错误示例
210
+
211
+ ```python
212
+ # BAD: 测试之间共享可变状态
213
+ class TestUserService:
214
+ user_id = None # 类级别共享状态
215
+
216
+ def test_create_user(self):
217
+ user = UserService.create(name="Alice")
218
+ TestUserService.user_id = user.id # 后续测试依赖这个值
219
+ assert user.name == "Alice"
220
+
221
+ def test_update_user(self):
222
+ # 依赖 test_create_user 先执行
223
+ UserService.update(TestUserService.user_id, name="Bob")
224
+ user = UserService.get(TestUserService.user_id)
225
+ assert user.name == "Bob"
226
+
227
+ def test_delete_user(self):
228
+ # 依赖前两个测试的执行顺序
229
+ UserService.delete(TestUserService.user_id)
230
+ assert UserService.get(TestUserService.user_id) is None
231
+ ```
232
+
233
+ ### 正确示例
234
+
235
+ ```python
236
+ # GOOD: 每个测试独立设置和清理
237
+ class TestUserService:
238
+ def test_create_user(self, db):
239
+ user = UserService.create(name="Alice")
240
+ assert user.name == "Alice"
241
+
242
+ def test_update_user(self, db):
243
+ user = UserService.create(name="Alice") # 自己创建
244
+ UserService.update(user.id, name="Bob")
245
+ updated = UserService.get(user.id)
246
+ assert updated.name == "Bob"
247
+
248
+ def test_delete_user(self, db):
249
+ user = UserService.create(name="Alice") # 自己创建
250
+ UserService.delete(user.id)
251
+ assert UserService.get(user.id) is None
252
+
253
+ @pytest.fixture
254
+ def db():
255
+ """每个测试使用独立的数据库事务并自动回滚。"""
256
+ connection = get_test_connection()
257
+ transaction = connection.begin()
258
+ yield connection
259
+ transaction.rollback()
260
+ ```
261
+
262
+ ### 检测方法
263
+
264
+ - `pytest --randomly` 或 `pytest-random-order` 打乱顺序后测试失败
265
+ - 测试类中存在类级别的可变属性
266
+ - 一个测试的 Fixture 依赖另一个测试的副作用
267
+
268
+ ---
269
+
270
+ ## 反模式 5: 无断言测试 (Assertion-Free Tests)
271
+
272
+ ### 描述
273
+
274
+ 测试执行了代码但不验证任何结果,仅确认"代码没有抛异常"。这类测试提供虚假的覆盖率而不提供任何质量保证。
275
+
276
+ ### 危害
277
+
278
+ - 覆盖率数字好看但测试毫无价值
279
+ - 功能回归无法被检测到
280
+ - 团队误以为功能已充分测试
281
+
282
+ ### 错误示例
283
+
284
+ ```python
285
+ # BAD: 没有任何断言
286
+ def test_generate_report():
287
+ service = ReportService()
288
+ service.generate_report(month="2024-01")
289
+ # 测试到此结束,没有验证报告内容、格式、文件是否生成
290
+
291
+
292
+ # BAD: 只断言"不是 None"等无意义条件
293
+ def test_search_products():
294
+ results = ProductService.search("laptop")
295
+ assert results is not None # 返回空列表也通过
296
+ ```
297
+
298
+ ### 正确示例
299
+
300
+ ```python
301
+ # GOOD: 明确断言预期结果
302
+ def test_generate_report():
303
+ service = ReportService(data_source=FakeDataSource(revenue=50000))
304
+ report = service.generate_report(month="2024-01")
305
+
306
+ assert report.title == "2024年1月财务报告"
307
+ assert report.total_revenue == 50000
308
+ assert report.sections == ["概览", "收入明细", "支出明细", "利润分析"]
309
+ assert report.generated_at is not None
310
+
311
+
312
+ # GOOD: 断言结果的具体属性
313
+ def test_search_products():
314
+ results = ProductService.search("laptop")
315
+ assert len(results) == 3
316
+ assert all(r.category == "electronics" for r in results)
317
+ assert results[0].relevance_score > results[1].relevance_score
318
+ ```
319
+
320
+ ### 检测方法
321
+
322
+ - 测试函数中没有 `assert` 关键字
323
+ - 仅有 `assert x is not None` 或 `assert len(x) > 0` 等弱断言
324
+ - 使用 `pytest --assert-rewrite` 检查断言质量
325
+
326
+ ---
327
+
328
+ ## 反模式 6: 只测 Happy Path(缺少异常路径测试)
329
+
330
+ ### 描述
331
+
332
+ 只测试正常输入和预期流程,忽略错误处理、边界条件、异常输入、超时、并发等场景。生产环境的 Bug 绝大多数来自非 Happy Path。
333
+
334
+ ### 危害
335
+
336
+ - 异常输入导致未处理异常、数据损坏或安全漏洞
337
+ - 错误处理逻辑从未被验证,上线后才发现不工作
338
+ - 用户体验在异常场景下断崖式下降
339
+
340
+ ### 错误示例
341
+
342
+ ```python
343
+ # BAD: 只测正常场景
344
+ class TestPaymentService:
345
+ def test_process_payment(self):
346
+ result = PaymentService.charge(user_id=1, amount=99.99)
347
+ assert result.status == "success"
348
+ # 没有测试:金额为0、负数、超大金额、用户不存在、余额不足、
349
+ # 网络超时、重复支付、并发支付、货币不支持等场景
350
+ ```
351
+
352
+ ### 正确示例
353
+
354
+ ```python
355
+ # GOOD: 覆盖多种异常路径
356
+ class TestPaymentService:
357
+ def test_successful_payment(self):
358
+ result = PaymentService.charge(user_id=1, amount=99.99)
359
+ assert result.status == "success"
360
+
361
+ def test_zero_amount_rejected(self):
362
+ with pytest.raises(ValueError, match="Amount must be positive"):
363
+ PaymentService.charge(user_id=1, amount=0)
364
+
365
+ def test_negative_amount_rejected(self):
366
+ with pytest.raises(ValueError, match="Amount must be positive"):
367
+ PaymentService.charge(user_id=1, amount=-10)
368
+
369
+ def test_insufficient_balance(self):
370
+ result = PaymentService.charge(user_id=1, amount=999999)
371
+ assert result.status == "insufficient_funds"
372
+ assert result.error_code == "E_BALANCE"
373
+
374
+ def test_user_not_found(self):
375
+ with pytest.raises(UserNotFoundError):
376
+ PaymentService.charge(user_id=99999, amount=10)
377
+
378
+ def test_gateway_timeout_retries(self, mocker):
379
+ mocker.patch("app.gateway.charge",
380
+ side_effect=[TimeoutError, TimeoutError, {"status": "ok"}])
381
+ result = PaymentService.charge(user_id=1, amount=10)
382
+ assert result.status == "success" # 第三次重试成功
383
+
384
+ def test_idempotent_duplicate_payment(self):
385
+ key = "pay-abc-123"
386
+ PaymentService.charge(user_id=1, amount=10, idempotency_key=key)
387
+ result = PaymentService.charge(user_id=1, amount=10, idempotency_key=key)
388
+ assert result.status == "duplicate"
389
+ ```
390
+
391
+ ### 检测方法
392
+
393
+ - 测试类中没有 `pytest.raises` 或异常断言
394
+ - Mutation Testing 通过率低于 80%
395
+ - 测试用例中所有输入都是"正常值"
396
+
397
+ ---
398
+
399
+ ## 反模式 7: 100% 覆盖率执念 (100% Coverage Obsession)
400
+
401
+ ### 描述
402
+
403
+ 团队将 100% 代码覆盖率作为硬性目标,导致为了达标而编写大量无意义的测试(如测试 Getter/Setter、测试框架代码、测试配置常量),真正需要测试的复杂逻辑反而被忽视。
404
+
405
+ ### 危害
406
+
407
+ - 测试维护成本飙升,团队怨声载道
408
+ - 无意义的测试稀释了测试套件的信号价值
409
+ - 关注覆盖率数字而非测试质量
410
+
411
+ ### 错误示例
412
+
413
+ ```python
414
+ # BAD: 为了覆盖率测试数据类和常量
415
+ class Config:
416
+ DB_HOST = "localhost"
417
+ DB_PORT = 5432
418
+
419
+ def test_config_db_host():
420
+ assert Config.DB_HOST == "localhost"
421
+
422
+ def test_config_db_port():
423
+ assert Config.DB_PORT == 5432
424
+
425
+
426
+ # BAD: 为了覆盖率测试简单的 DTO
427
+ @dataclass
428
+ class UserDTO:
429
+ name: str
430
+ email: str
431
+
432
+ def test_user_dto():
433
+ user = UserDTO(name="Alice", email="alice@example.com")
434
+ assert user.name == "Alice"
435
+ assert user.email == "alice@example.com"
436
+ ```
437
+
438
+ ### 正确示例
439
+
440
+ ```python
441
+ # GOOD: 将测试精力集中在高风险、高复杂度的业务逻辑上
442
+ # 使用覆盖率作为发现未测试代码的工具,而非目标
443
+
444
+ # coveragerc 配置:排除不需要测试的代码
445
+ # [run]
446
+ # omit =
447
+ # */config.py
448
+ # */models.py
449
+ # */migrations/*
450
+
451
+ # 测试复杂的计算逻辑
452
+ class TestTaxCalculator:
453
+ @pytest.mark.parametrize("income,expected_tax", [
454
+ (0, 0),
455
+ (5000, 0), # 起征点以下
456
+ (10000, 150), # 第一档
457
+ (30000, 2590), # 跨档
458
+ (100000, 21790), # 高收入
459
+ ])
460
+ def test_personal_income_tax(self, income, expected_tax):
461
+ assert TaxCalculator.calculate(income) == expected_tax
462
+
463
+ def test_tax_with_special_deductions(self):
464
+ result = TaxCalculator.calculate(
465
+ income=20000,
466
+ deductions={"housing": 1500, "education": 1000, "elderly": 2000},
467
+ )
468
+ assert result < TaxCalculator.calculate(20000)
469
+ ```
470
+
471
+ ### 检测方法
472
+
473
+ - 覆盖率 > 95% 但 Mutation Testing 存活率 > 30%
474
+ - 大量测试仅验证语言/框架的基本功能
475
+ - 团队在覆盖率报告中排除了 0 行代码
476
+
477
+ ---
478
+
479
+ ## 反模式 8: Ice Cream Cone(反金字塔测试结构)
480
+
481
+ ### 描述
482
+
483
+ 测试分布呈倒金字塔形:大量 E2E / UI 测试、少量集成测试、极少或没有单元测试。与理想的测试金字塔(大量单元测试 > 适量集成测试 > 少量 E2E 测试)完全相反。
484
+
485
+ ### 危害
486
+
487
+ - 测试执行极慢(E2E 通常需要分钟级),CI 反馈周期长
488
+ - 测试极脆弱,UI 变化导致大面积失败
489
+ - 故障定位困难,E2E 失败可能由任意层级引起
490
+
491
+ ### 错误示例
492
+
493
+ ```
494
+ # BAD: 反金字塔测试分布
495
+ tests/
496
+ ├── e2e/ # 200 个 E2E 测试(Selenium/Playwright)
497
+ │ ├── test_login_flow.py
498
+ │ ├── test_checkout_flow.py
499
+ │ ├── test_search_and_filter.py
500
+ │ └── ... (197 more)
501
+ ├── integration/ # 20 个集成测试
502
+ │ └── test_api_endpoints.py
503
+ └── unit/ # 5 个单元测试
504
+ └── test_utils.py
505
+
506
+ # 结果:CI 运行 45 分钟,Flaky rate 30%+
507
+ ```
508
+
509
+ ### 正确示例
510
+
511
+ ```
512
+ # GOOD: 测试金字塔分布
513
+ tests/
514
+ ├── unit/ # 500+ 单元测试(秒级完成)
515
+ │ ├── test_pricing.py
516
+ │ ├── test_tax_calculator.py
517
+ │ ├── test_inventory.py
518
+ │ └── ... (业务逻辑全覆盖)
519
+ ├── integration/ # 80 个集成测试(分钟级)
520
+ │ ├── test_order_api.py
521
+ │ ├── test_payment_gateway.py
522
+ │ └── test_database_queries.py
523
+ └── e2e/ # 15 个 E2E 测试(仅核心流程)
524
+ ├── test_signup_to_first_purchase.py
525
+ ├── test_checkout_and_payment.py
526
+ └── test_return_and_refund.py
527
+
528
+ # 结果:CI 运行 5 分钟,Flaky rate < 2%
529
+ ```
530
+
531
+ ### 检测方法
532
+
533
+ - 统计各层级测试数量比例
534
+ - CI 平均执行时间 > 20 分钟
535
+ - 日常开发时开发者跳过测试(`-k "not e2e"`)
536
+
537
+ ---
538
+
539
+ ## 反模式 9: Copy-Paste 测试 (Duplicated Test Code)
540
+
541
+ ### 描述
542
+
543
+ 测试代码大量复制粘贴,仅改变少量参数或断言值,导致测试文件膨胀、维护困难,修改一个模式需要改 N 个地方。
544
+
545
+ ### 危害
546
+
547
+ - 测试代码量爆炸,文件达数千行
548
+ - 修改测试模式需要逐个修改所有副本
549
+ - 遗漏修改导致测试不一致
550
+
551
+ ### 错误示例
552
+
553
+ ```python
554
+ # BAD: 大量重复的测试代码
555
+ def test_validate_email_valid_1():
556
+ assert validate_email("user@example.com") is True
557
+
558
+ def test_validate_email_valid_2():
559
+ assert validate_email("user.name@example.com") is True
560
+
561
+ def test_validate_email_valid_3():
562
+ assert validate_email("user+tag@example.com") is True
563
+
564
+ def test_validate_email_invalid_1():
565
+ assert validate_email("") is False
566
+
567
+ def test_validate_email_invalid_2():
568
+ assert validate_email("not-an-email") is False
569
+
570
+ def test_validate_email_invalid_3():
571
+ assert validate_email("@example.com") is False
572
+
573
+ def test_validate_email_invalid_4():
574
+ assert validate_email("user@") is False
575
+
576
+ # 7 个测试函数,每个结构完全一样
577
+ ```
578
+
579
+ ### 正确示例
580
+
581
+ ```python
582
+ # GOOD: 使用参数化消除重复
583
+ @pytest.mark.parametrize("email,expected", [
584
+ ("user@example.com", True),
585
+ ("user.name@example.com", True),
586
+ ("user+tag@example.com", True),
587
+ ("", False),
588
+ ("not-an-email", False),
589
+ ("@example.com", False),
590
+ ("user@", False),
591
+ ])
592
+ def test_validate_email(email, expected):
593
+ assert validate_email(email) is expected
594
+
595
+
596
+ # GOOD: 使用 Fixture 和 Factory 消除设置重复
597
+ @pytest.fixture
598
+ def order_factory(db):
599
+ def _create(status="pending", items=None, **kwargs):
600
+ items = items or [{"sku": "BOOK-001", "qty": 1, "price": 29.99}]
601
+ return Order.create(status=status, items=items, **kwargs)
602
+ return _create
603
+
604
+ def test_cancel_pending_order(order_factory):
605
+ order = order_factory(status="pending")
606
+ order.cancel()
607
+ assert order.status == "cancelled"
608
+
609
+ def test_cannot_cancel_shipped_order(order_factory):
610
+ order = order_factory(status="shipped")
611
+ with pytest.raises(InvalidStateError):
612
+ order.cancel()
613
+ ```
614
+
615
+ ### 检测方法
616
+
617
+ - 测试文件中多个函数体结构完全一致
618
+ - 同一测试文件超过 500 行
619
+ - `pytest.mark.parametrize` 使用率低于 10%
620
+
621
+ ---
622
+
623
+ ## 反模式 10: 忽略边界条件 (Ignoring Boundary Conditions)
624
+
625
+ ### 描述
626
+
627
+ 测试只使用"正常范围"的输入值,忽略边界值(0、1、MAX、空字符串、null、最大长度、精度极限),而 Bug 最常出现在边界处。
628
+
629
+ ### 危害
630
+
631
+ - 整数溢出、除零错误、空指针异常等 Bug 上线后才被发现
632
+ - 数据库约束违反导致生产事故
633
+ - 安全漏洞(Buffer Overflow、注入)源于边界处理不当
634
+
635
+ ### 错误示例
636
+
637
+ ```python
638
+ # BAD: 只测试"正常"输入
639
+ def test_pagination():
640
+ results = search(query="python", page=1, page_size=20)
641
+ assert len(results) == 20
642
+
643
+ def test_calculate_average():
644
+ assert calculate_average([1, 2, 3, 4, 5]) == 3.0
645
+
646
+ def test_truncate_text():
647
+ assert truncate("Hello World", max_length=5) == "Hello..."
648
+ ```
649
+
650
+ ### 正确示例
651
+
652
+ ```python
653
+ # GOOD: 系统化地测试边界条件
654
+ class TestPagination:
655
+ def test_first_page(self):
656
+ results = search(query="python", page=1, page_size=20)
657
+ assert len(results) <= 20
658
+
659
+ def test_page_zero_raises(self):
660
+ with pytest.raises(ValueError):
661
+ search(query="python", page=0, page_size=20)
662
+
663
+ def test_negative_page_raises(self):
664
+ with pytest.raises(ValueError):
665
+ search(query="python", page=-1, page_size=20)
666
+
667
+ def test_page_size_zero_raises(self):
668
+ with pytest.raises(ValueError):
669
+ search(query="python", page=1, page_size=0)
670
+
671
+ def test_page_beyond_results(self):
672
+ results = search(query="python", page=99999, page_size=20)
673
+ assert results == []
674
+
675
+ def test_empty_query(self):
676
+ results = search(query="", page=1, page_size=20)
677
+ assert results == []
678
+
679
+ def test_max_page_size(self):
680
+ results = search(query="python", page=1, page_size=1000)
681
+ assert len(results) <= 100 # 服务端限制最大 page_size
682
+
683
+
684
+ class TestCalculateAverage:
685
+ def test_normal(self):
686
+ assert calculate_average([1, 2, 3]) == 2.0
687
+
688
+ def test_single_element(self):
689
+ assert calculate_average([42]) == 42.0
690
+
691
+ def test_empty_list_raises(self):
692
+ with pytest.raises(ValueError, match="Cannot calculate average of empty list"):
693
+ calculate_average([])
694
+
695
+ def test_large_numbers(self):
696
+ assert calculate_average([1e18, 1e18]) == 1e18
697
+
698
+ def test_floating_point_precision(self):
699
+ result = calculate_average([0.1, 0.2])
700
+ assert abs(result - 0.15) < 1e-10 # 不用 == 比较浮点数
701
+ ```
702
+
703
+ ### 检测方法
704
+
705
+ - 测试输入中没有 0、空值、极大值、极小值
706
+ - 没有使用 `pytest.raises` 测试异常输入
707
+ - Mutation Testing 在边界检查代码上的存活率高
708
+
709
+ ---
710
+
711
+ ## Agent Checklist
712
+
713
+ - [ ] 代码评审时对照本文档逐项检查测试质量
714
+ - [ ] 新测试代码必须避免以上 10 种反模式
715
+ - [ ] 已有测试中的反模式已建立修复计划和优先级
716
+ - [ ] 测试分布符合金字塔原则(单元 > 集成 > E2E)
717
+ - [ ] `pytest.mark.parametrize` 在重复场景中优先使用
718
+ - [ ] Flaky Test 有专门的跟踪和修复流程