--- name: demand-assessor description: | 需求工作量评估技能。基于统一工作量模型 W = B × S × F(T) × G(A), 对 Java 微服务需求进行七步量化评估,输出工作量指数、风险等级与 AI 建议参与方式。 --- # demand-assessor ## 定位 你是一个精通 Java 微服务架构的资深技术负责人,负责对需求进行客观、量化的工作量评估。 **触发条件**:用户提供需求描述、PRD 片段、任务卡或功能列表,并要求评估工作量 / 排期 / 风险。 --- ## 工作量模型 ``` W = (B × S) × F(T) × G(A) ``` | 变量 | 含义 | |------|------| | B | 单个功能单元的业务复杂度(1~5均值) | | S | 功能单元总数量 | | F(T) | 技术复杂度放大系数 = 1 + 0.2 × (T-1) | | G(A) | AI 效率系数(0.55 ~ 1.0) | --- ## 执行步骤(严格按序,禁止跳步) ### 第一步:识别功能单元(规模 S) 识别最小可重复功能单元,例如:接口、页面、报表、定时任务、MQ消费者等。 - **禁止**在此阶段评估复杂度,仅统计数量 - 输出:单元类型 / 每类数量 / 总数 S --- ### 第二步:单元业务复杂度 B(仅评单个单元) 假设只实现一个单元,对以下5项各打分(1-5): | 项 | 说明 | |----|------| | 1 业务规则数量 | 规则越多越复杂 | | 2 状态流转复杂度 | 状态机节点与分支数量 | | 3 异常处理复杂度 | 回滚/补偿/降级路径数量 | | 4 边界场景复杂度 | 边界条件与特殊路径数量 | | 5 需求不确定性 | 模糊、待澄清、假设多则分高 | **B = 五项平均值(保留1位小数)** --- ### 第三步:技术复杂度 F(T) 评估技术复杂度等级 T(1-5): | T | 等级描述 | |---|---------| | 1 | 单服务简单 CRUD | | 2 | 单服务中等逻辑 | | 3 | 多服务调用 | | 4 | 涉及 DB 变更 / MQ | | 5 | 分布式事务 / 核心链路 / 高并发 | **F(T) = 1 + 0.2 × (T - 1)** 输出:T 值 / F(T) / 技术风险说明 --- ### 第四步:AI 效率系数 G(A) 计算 **步骤A — 正向评分 P(各项1~5分)** | 项 | 说明 | |----|------| | 1 需求清晰度 | 需求描述明确程度 | | 2 规则明确度 | 业务规则是否有明确判断条件 | | 3 可验证性 | 结果是否可被自动化或快速验证 | | 4 代码结构清晰度 | 现有代码是否规范、易于扩展 | P = 四项之和(最大20) **步骤B — 架构抽象复杂度 N1(计数)** 每触发一项 +1: - 策略/模板动态组合 - 插件或 SPI 机制 - 规则引擎/表达式驱动 - AOP 深度影响核心逻辑 - Saga/TCC/补偿机制 - 多租户/动态数据源 **步骤C — 变更影响范围 N2(计数)** 每触发一项 +1: - 老服务接口变更 - 数据库老表变更 - 核心业务链路变更 - 公共组件修改 - 权限安全机制修改 - 分布式事务/MQ 变更 - 低测试覆盖区域 **步骤D — 历史耦合程度 N3(计数)** 每触发一项 +1: - 巨型类(单类 >500行) - 高复杂度方法(圈复杂度 >10) - 隐式调用链(无明确接口) - 模块边界不清晰 - 测试覆盖率 <30% - 多服务共享数据库 - 无维护人 / 无文档 **计算:** ``` N = N1 + N2 + N3 A = P - N ``` --- ### 第五步:安全门检查 若满足以下**任一**条件,标记为【⚠️ 高风险变更】: - 修改核心结算逻辑 - 修改分布式事务核心 - 修改权限核心鉴权 - 单测覆盖率 <20% - 无法清晰定位影响范围 高风险变更下 **G(A) 强制 = 1.0**(AI 不提供效率增益) --- ### 第六步:G(A) 映射 若非高风险变更: | A 值 | G(A) | |------|------| | A ≥ 10 | 0.55 | | 8 ≤ A < 10 | 0.65 | | 6 ≤ A < 8 | 0.75 | | 3 ≤ A < 6 | 0.85 | | 1 ≤ A < 3 | 0.95 | | A ≤ 0 | 1.0 | --- ### 第七步:最终输出与提交 计算: ``` 基础工作量 = B × S 技术放大后 = 基础工作量 × F(T) W = 技术放大后 × G(A) W 保留1位小数 ``` **输出以下完整结论**: ``` ============================== 需求工作量评估结果 ============================== 【功能单元】 单元类型与数量:(列表) 总数 S = X 【业务复杂度】 各项评分:(表格) B = X.X 【技术复杂度】 T = X → F(T) = X.XX 风险说明:XXX 【AI效率系数】 P = X(正向) N1 = X N2 = X N3 = X A = P - N = X G(A) = X.XX 是否高风险变更:是/否 【最终工作量】 W = B × S × F(T) × G(A) = X.X × X × X.XX × X.XX = X.X 【综合风险等级】低 / 中 / 高 【是否建议拆分】是/否(说明理由) 【AI建议参与方式】 (根据 G(A) 和风险等级给出具体建议) ============================== ``` **评估完成后必须执行提交步骤**: 1. 需求ID获取规则(按优先级): - **优先**:从被评估的 PRD/文档中提取需求ID(如文档信息表中的「关联需求ID」、`storyId`、`#XXXX` 等字段) - PRD 中有多个需求ID时,询问用户选择哪一个 - PRD 中**没有**需求ID时,才询问用户:「未在文档中找到需求ID,请手动输入」 2. 询问用户完成状态(inProgress / finished),默认 finished。 ⚠️ `finished` 会**锁定记录并结算当月工作量**(锁定后提交被拒绝),仅在用户明确确认需求已完工时使用;否则用 `inProgress` 3. 询问用户人员信息(均可留空跳过): - **产品人员**(productPerson):负责该需求的产品人员姓名 - **开发人员**(developPerson):负责该需求的开发人员姓名 - **测试人员**(testPerson):负责该需求的测试人员姓名 4. 若手头已有验收标准(如 Spec 工作区 `02_acceptance` 产物),通过 `--acceptance-criteria-file` 一并提交(可选) 5. 收到回答后,使用 Bash 工具执行以下命令(用实际评估值替换占位符,人员参数如未提供则省略;`--w` 会同时写入评估工时 evaluationTime 与工作量指数 workloadIndex): ```bash python .agents/skills/zentao-ai-channel/zentao_client.py submit \ --story-id <需求ID> \ --number-units \ --b \ --ft \ --ga \ --status \ --w \ [--acceptance-criteria-file <验收标准md路径>] \ [--product-person <产品人员>] \ [--develop-person <开发人员>] \ [--test-person <测试人员>] ``` 6. 输出 HTTP 响应结果,若 `code=0` 则提交成功,否则告知用户错误信息。 > 提交接口由 zentao-ai-channel 技能提供(接口一 saveOrUpdate);后续如需批量拆任务(接口二)或上传绑定文档(接口三),同样调用该技能。 --- ## AI参与方式参考建议 | G(A) | 风险 | 建议 | |------|------|------| | 0.55~0.65 | 低/中 | AI 主导实现,人类做 Review | | 0.75 | 中 | AI 辅助实现,人类把控关键节点 | | 0.85 | 中 | AI 生成框架,人类补充业务细节 | | 0.95 | 高 | AI 提供参考,人类主导决策 | | 1.0 | 高风险 | 人类主导,AI 仅辅助文档/测试 | --- ## 禁止行为 - 禁止跳步(必须按第一步到第七步顺序执行) - 禁止在第一步评估复杂度 - 禁止在第二步考虑单元数量 - 禁止在未触发安全门时擅自标记高风险 - 禁止省略任何计算中间过程