7.9 KiB
| name | version | description | trigger_conditions | ||||
|---|---|---|---|---|---|---|---|
| function-point-counting | 1.0.0 | Use when 估算或复核软件功能点(FP/ILF/EIF/EI/EO/EQ/DET/FTR)。 |
|
软件功能点自动计算(IFPUG 口径,LLM 语义 + 规则引擎计算)
源文档:《软件功能点自动计算原则》全文见 references/principles-full.md(16 章)。
本技能是它的可执行操作手册;原则冲突时以 references 原文为准。
分工铁律(文档第 16 章)
- LLM 只做语义理解:①需求解析 ②功能候选识别 ③系统边界 ④ILF/EIF ⑤EI/EO/EQ ⑥去重 ⑦DET/RET/FTR 提取。
- 复杂度判定与 FP 加权(⑧⑨)必须交给规则引擎:
scripts/fp_calc.py。 禁止 LLM 心算 FP、禁止 LLM 直接报总数。LLM 输出结构化 JSON(type/det/ret/ftr/confidence/evidence), 脚本查矩阵+权重表算复杂度与 FP,并生成四件套报告。 - ⑩ 复核:把脚本输出交人工/规则复核后才定稿。
十步工作流
- 读需求文档(全文,不跳章)。
- 定应用边界:本系统维护哪些数据、读哪些外部数据、哪些处理在外部完成。未定边界禁止往下算。
- 列用户角色与外部系统。
- 识别业务过程(业务动作+业务数据+处理目的+业务结果四要素齐才算候选)。
- 识别数据对象 → 判 ILF/EIF(见决策树)。
- 识别事务 → 判 EI/EO/EQ(见决策树)。
- 去重(同功能跨页面/角色/终端/接口只算一次)。
- 逐功能提 DET/RET/FTR,标置信度;信息不足进待确认,不猜。
- 写 input.json 跑
scripts/fp_calc.py得复杂度与 FP。 - 输出四件套 + 证据链,交复核。
分类决策树
ILF(数据功能·内部):数据在本边界内 ∧ 本系统维护 ∧ 用户可识别 ∧ 结构稳定。 EIF(数据功能·外部):数据他系统维护 ∧ 本系统只读引用 ∧ 对本系统业务有意义。 EI(事务·输入):边界外数据/控制信息进入 ∧ 引起业务处理或维护内部数据 (新增/修改/删除/提交/审批/填报/导入/AI 生成提交类)。 EO(事务·输出):输出含 计算|汇总|派生|转换|复杂处理|业务规则 之一。 EQ(事务·查询):输入条件→检索→直接展示,无计算派生。 EO vs EQ 一句话:结果里有"算出来的数"(总数/比率/均值/趋势)=EO;只是把存的数据捞出来摆好=EQ。
功能独立性四问(全"是"才独立成点,否则并入所属业务事务)
独立业务目的?独立触发事件?独立处理逻辑?独立业务结果?
拆分禁令(五不按)
不按页面、不按按钮、不按 API、不按数据库表、不按 CRUD 机械拆。 例:人员管理/新增/编辑/详情 4 页 ≠ 4 功能;POST/PUT/DELETE/GET /user ≠ 4 功能; user/user_role/user_project/user_skill 4 表 ≠ 4 ILF(按逻辑数据分组判)。
去重三不
同业务功能不因 ①多页面 ②多角色(仅权限不同)③多展现形式(Web/移动/API)重复计。
特殊场景
- 报表:纯查询=EQ;含统计/计算/汇总/派生=EO;复杂指标分析优先 EO。
- 工作流:不按节点数算;按 发起→输入→审批→状态变化→结果 的业务过程定 EI/EO/EQ/数据功能。
- 导入:接收外部数据+校验转换写入=EI。导出:简单=EQ,含汇总/计算/转换/派生=EO。
- 消息通知:流程内自动通知(如审批后发短信)=该流程的处理逻辑,不单独加点; 仅当通知本身是独立业务(用户主动群发管理)才算。
- 接口:一个 API ≠ 一个功能点;按接口背后业务判 EI/EO/EQ/ILF/EIF。
- AI 功能:一个 Prompt ≠ 一个功能点;按实际输入/处理/输出/引用数据分析 (如"AI 生成岗位描述"=用户提交需求(EI 输入)→调用生成→返回结果(EO/EQ 视有无派生))。
不确定信息(核心规则)
需求不足以定类型/边界/复杂度时不得猜测,输出三要素进待确认清单:
状态:待确认 / 原因:缺少…… / 需要确认:……
例:"系统支持人员统计分析"→ 问:统计哪些指标?含计算吗?含趋势吗?数据源?支持筛选?生成报表?
置信度:high=描述明确可直接算;medium=功能明确但 DET/FTR 部分缺失,可算但标假设;
low=只有模糊描述("具备XX管理能力")→ 进待确认,不给数。
证据优先与十条禁止(system prompt 级强约束)
只算需求明确存在或可直接推导的功能。禁止为"完整"自补:用户管理/日志/权限/消息/字典/表/API/后台/配置。 1 禁止凭经验补功能 2 禁止按页面数 3 禁止按按钮数 4 禁止按 API 数 5 禁止按表数 6 禁止按代码量 7 禁止为抬高 FP 拆分 8 禁止重复计算 9 禁止缺证据强判(标待确认) 10 禁止修改需求事实(只识别需求,不创造需求)。
复杂度矩阵与权重(IFPUG 4.x,fp_calc.py 内置)
档位:EI 的 DET 1-4/5-15/≥16、FTR 0-1/2/≥3;EO·EQ 的 DET 1-5/6-19/≥20、FTR 0-1/2-3/≥4; ILF·EIF 的 DET 1-19/20-50/≥51、RET 1/2-5/≥6。 矩阵(行=FTR或RET档,列=DET档): EI/ILF:低低低/低中高/中高高(EIF 第一行第三列=中)。 权重 UFP:ILF 7/10/15,EIF 5/7/10,EI 3/4/6,EO 4/5/7,EQ 3/4/6(低/中/高)。 项目另有约定权重表时改 fp_calc.py 的 WEIGHTS/MATRIX,不改流程。
规则引擎用法
python3 scripts/fp_calc.py input.json # markdown 四件套
python3 scripts/fp_calc.py input.json --json # JSON(程序消费/复核)
input.json schema:
{"project": "名", "boundary": {"internal": [], "external": []},
"functions": [{"name": "", "type": "EI|EO|EQ|ILF|EIF", "desc": "",
"evidence": "需求章节+原文摘要", "det": 12, "ret": 1, "ftr": 2,
"confidence": "high|medium|low", "assumption": "可选"}],
"pending": [{"item": "", "reason": "", "ask": ""}],
"assumptions": [""]}
ret 仅 ILF/EIF 用(缺省 1),ftr 仅 EI/EO/EQ 用(缺省 0)。校验失败的功能进"输入校验错误"不计入。 脚本输出即文档第 14 章四件套:功能明细表 / 汇总(ILF·EIF·EI·EO·EQ 计数+总 UFP)/ 待确认项 / 计算假设。
证据链(每个功能点必须可回溯)
需求原文 → 功能识别 → 分类判断 → 复杂度判断 → FP 结果。 明细表每行带 evidence(章节+原文摘要)与 calc_basis(档位→复杂度→权重)。 没有证据支撑的功能不得进入最终计数。
典型案例标准答案(回归用)
| 需求描述 | 判定 | 要点 |
|---|---|---|
| 新增外包人员 | EI | 边界外输入+维护人员档案 |
| 按姓名/工号查人员 | EQ | 检索直展无计算 |
| 人员月度统计(流失率/到岗率/SLA) | EO | 有算出来的比率 |
| 人员档案(本系统维护) | ILF | 四条件齐 |
| 甲方HR员工信息(只读) | EIF | 他维护我引用 |
| 人员管理4个页面 | 1 组功能 | 不按页面拆 |
| 入场审批后自动发短信 | 不单独计 | 属审批流程处理逻辑 |
| Excel 批量导入人员 | EI | 校验转换写入 |
| "系统具备人员管理能力" | 待确认 | 低置信度不给数 |
| AI 生成岗位描述 | 按输入/处理/输出分析 | 一个 Prompt ≠ 一个点 |
防虚增审计模式(复核他人估算时)
逐条查:是否按页面/按钮/API/表/CRUD 拆?是否自补了无依据的通用功能? 是否同功能跨端重复?是否把流程内通知单列?是否缺证据强判? 命中即要求对方按本技能重算,并给出差异清单。