Project

General

Profile

QA验收 #39 » qa-report.md

Redmine Admin, 11/02/2026 03:20 AM

 

FIN-STAT-PERF #39:preview冲突集成定向QA

执行:2026-11-02 Asia/Shanghai,原可见QA责任聊天;仅本包,未恢复其他历史任务。

结论:本轮实际6 Pass / 0 Fail / 0 Blocked / 0 Skipped,12组完整响应一致。未发现此次冲突解决丢失preview毛利排除规则的阻断问题。

候选、范围和复用

  • Backend canonical根:/Users/gexiaowei/Documents/work/mindsetech/ndb/projects/ndb/backend;detached HEAD 473cc345,工作区resolved views仍为Git UU,两个新增文件A。QA未git add/continue或改产品源码;由Operations后续处理Git/部署。
  • 比较基线:精确git show 473cc345:api/finance/views.py提取原FinancialStatistics、round_money及calculate_gross_margin_rate,不使用f1aadbd基线或开发oracle。旧类原调用services绑定到逐字未变的真实模块。
  • resolved views SHA256:e9abc5674833bd7c5d9051a5ba4f310a3db152be2608fe97cfaf1b8b6dcb5b44。
  • helper SHA256:9ca03ae35295aa0353d2561e9da58dae0736f18d1c49741c13d12c2dea66d14a;与原验收helper相同。测试文件SHA256:20fd8f9dff8781a6a0e5b44877c46cfa3687ff9b4e6e32b5d21099d9ca3e578e。
  • 对resolved类从from api.projects.gross_margin import basis, tasks_basis起至返回的完整块做原文比较,包含monthly_bases、margin_basis与annual_total,和preview逐字相同。services.py、gross_margin.py亦与preview字节相同。
  • 影响:共享主索引docs/specs/backend/2026-11-02-finance-statistics-performance.md IMP-01/REG-01、REG-02,统计接口POST /v1/finances/statistics / Web Dashboard调用:相邻冲突可能丢失排除与月年舍入,故只补本轮差异。
  • 复用原QA10项/19对(#39 journal364,附件199–201)及开发13项有效证据,不重跑、不计本轮新执行数。Black/Ruff与主任务解析检查复用,不重复格式工具。无HTTP/JWT链代码变化,沿用其原层级;本轮不宣称HTTP重新验收。

环境与独立断言

激活crm_backend,采用config.settings.isolated_blacklist_tests,不读取原.env;独立内存SQLite、locmem缓存;socket及requests外连禁止。preview新增mcp_access应用在QA进程内加入MIGRATION_MODULES=None,与既有隔离配置一致,模型同步建表,不是迁移验证。无共享DB、服务或真实账号。

差分层级为真实ORM + DRF view/APIRequestFactory(使用合成finance身份force_authenticate),不是HTTP服务、正常登录复测、测试部署、前端或生产验证。既有两条回归走原APIClient路由。每个差分场景独立6个Task、24个四类费用、2公司2项目,USD汇率0.5;合成数据在事务及内存库内销毁。

每场景分别查询全部/公司A/公司B,共12对;严格比较JSON渲染后的完整信封、所有月度12元素数组、annual_total及gross_margin_basis。逐对比较财务五模型完整行,确认仅统计读取不改财务行;外连尝试0。

编号 影响/操作及预期 实际 状态 证据
FININT-01 IMP-01/REG-01,02;无排除,全部及A/B分别查询,完整响应与preview一致,排除0 3对一致,月度和annual_total一致,排除0 Pass comparisons.json scenario none-excluded
FININT-02 同接口;部分排除,两公司各排除1条,保留真实金额、仅改变毛利basis 3对一致;全部排除数2,A/B各1,财务行不变 Pass comparisons.json scenario partial-excluded
FININT-03 同接口;全部排除,原收入费用仍在,毛利basis不适用且收入成本0 3对一致;全部排除数6,A/B各3,basis applicable=false、income/cost为0 Pass comparisons.json scenario all-excluded
FININT-04 同接口;1、2、12月,USD半分边界及四类成本,逐月再年度舍入,一条排除与公司筛选 3对一致;年度真实收入100.05,与月度求和一致;排除数全部1/A1/B0 Pass comparisons.json scenario monthly-annual-rounding
FININT-05 指定既有test_financial_totals_remain_real_while_margin_changes;真实金额保留,毛利排除生效 APIClient:收入2000/费用600、毛利40%、basis收入1000 Pass attempt-02-execution.log / results.json
FININT-06 指定既有test_finance_keeps_monthly_rounding_with_and_without_flag;排除前后真实金额不变,毛利按月舍入 APIClient:年度真实收入0.02,basis从0.02到0.01,毛利0,monthly finance_data不变 Pass attempt-02-execution.log / results.json

QA准备纠正与历史保留

第一次建表在任何case前遇mcp_access迁移依赖缺口,记录preparation-error.json;仅进程内隔离配置修正,无产品修改。随后两条既有测试通过,4个差分场景因QA旧类namespace缺少旧services函数绑定而未取得比较响应,保存attempt-02-results.json、attempt-02-execution.log及attempt-02-summary.json,未当成产品失败。

补齐真实旧函数绑定,并确认services/gross_margin源码与preview一致后,仅续测4个尚未完成的差分场景,最终通过。两条已有Pass未重跑。原错误不覆盖,最终results.json保留6条最新有效结果。此为QA支持问题恢复,不是产品修复轮次。

边界与收尾

  • 本轮关闭此次冲突的规则保留风险,不把原10项与本轮6项重复相加为完整新一轮。
  • PostgreSQL计划/迁移、部署制品、测试站运行、生产规模性能/内存并发及真实页面未在本轮验证,由Operations按已获授权的发布链继续;不推断已部署或生产通过。
  • 内存SQLite及连接已销毁,外连0,三业务文件执行前后hash相同,Git仍A/A/UU。未写共享主索引、源码、配置、共享/生产DB,无Git写/提交/推送/部署;本轮仅本qa-staging-integration目录及#39增量写回。
  • 原#39 journal364不覆盖;本轮追加一次并全文读回,收据见writeback-receipt.json。
(4-4/11)