name: SFDIPOT产品因素分析 description: “詹姆斯·巴赫的HTSM产品因素(SFDIPOT)分析,用于生成全面测试策略。在分析需求、史诗或用户故事时使用,以跨结构、功能、数据、接口、平台、操作和时间维度生成优先排序的测试想法。” category: 需求分析 priority: 高 tokenEstimate: 1500 agents: [qe-product-factors-assessor, qe-test-idea-rewriter] implementation_status: 优化 optimization_version: 1.0 last_optimized: 2026-01-17 dependencies: [brutal-honesty-review] quick_reference_card: 是 tags: [sfdipot, htsm, product-factors, test-strategy, requirements, james-bach]
SFDIPOT产品因素分析
<default_to_action> 分析需求时:
- 识别文档类型(史诗、用户故事、规格、架构文档)
- 检测领域上下文(电子商务、医疗保健、金融等)
- 系统分析每个SFDIPOT类别
- 使用行动动词生成测试想法(避免“验证”模式)
- 分配优先级(P0-P3)和自动化适用性
- 提出覆盖率差距的澄清问题
- 以请求格式输出(HTML、JSON、MD、Gherkin)
质量门限:
- 人工探索 >= 10%
- 避免“验证X”测试模式
- 优先级分布:P0(8-12%)、P1(20-30%)、P2(35-45%)、P3(20-30%) </default_to_action>
快速参考卡
7个产品因素
| 因素 | 问题 | 示例焦点领域 |
|---|---|---|
| 结构 | 它是什么? | 组件、代码、依赖 |
| 功能 | 它做什么? | 功能、计算、错误 |
| 数据 | 它处理什么? | 输入、输出、持久化 |
| 接口 | 它如何连接? | UI、API、集成 |
| 平台 | 它依赖什么? | 操作系统、浏览器、硬件 |
| 操作 | 它如何使用? | 工作流、管理、恢复 |
| 时间 | 事情何时发生? | 并发、调度 |
何时使用此技能
| 场景 | 优先级 | 输出 |
|---|---|---|
| 新史诗规划 | 高 | 完整SFDIPOT评估 + 测试想法 |
| 冲刺需求评审 | 中 | 针对性分析 + 澄清问题 |
| 测试策略定义 | 高 | 全面测试覆盖计划 |
| 风险评估 | 高 | 领域加权优先级分配 |
| 覆盖率差距分析 | 中 | 深入问题 + 推荐 |
SFDIPOT分析框架
结构(产品是什么)
子类别:
- 代码完整性:代码质量、复杂性、可维护性
- 硬件:物理组件、设备、外设
- 非可执行文件:配置、数据文件、文档
- 可执行文件:二进制文件、脚本、库
- 依赖:第三方库、外部服务
示例测试想法:
- 分析关键模块的圈复杂度;标记函数 > 10
- 注入损坏的配置文件;确认优雅降级
- 升级依赖版本;验证无破坏性变更
功能(产品做什么)
子类别:
- 应用:核心业务功能
- 计算:数学运算、转换
- 错误处理:异常管理、恢复
- 安全:认证、授权、加密
- 状态转换:工作流状态、数据生命周期
- 消息:通知、事件、队列
- 数据转换:格式转换、映射
示例测试想法:
- 提交1000行订单;测量处理时间
- 在搜索字段注入SQL;确认消毒防止执行
- 触发状态转换超时;观察重试行为
数据(产品处理什么)
子类别:
- 输入:用户输入、文件上传、API有效负载
- 输出:响应、报告、导出
- 持久化:数据库存储、缓存
- 存储:文件系统、云存储
- 边界:最小/最大值、边缘情况
- 验证:格式规则、业务规则
- 格式:JSON、XML、CSV处理
示例测试想法:
- 上传100MB文件;确认分块处理完成
- 在文本字段插入表情;验证存储和检索
- 查询边界日期(2038-01-19);检查时间戳处理
接口(产品如何连接)
子类别:
- 用户界面:Web、移动、桌面UI
- API:REST、GraphQL、gRPC端点
- 集成:第三方服务连接
- 协议:HTTP、WebSocket、MQTT
- CLI:命令行界面
示例测试想法:
- 调整浏览器宽度至320px;确认响应式断点
- 发送畸形JSON到API;断言400响应及详情
- 断开WebSocket中途;观察重连接
平台(产品依赖什么)
子类别:
- 浏览器:Chrome、Firefox、Safari、Edge
- 操作系统:Windows、macOS、Linux、iOS、Android
- 硬件:CPU、内存、存储限制
- 外部软件:数据库、消息队列
- 网络:延迟、带宽、离线
示例测试想法:
- 在1GB RAM设备上执行;分析内存使用
- 以500ms网络延迟运行;测量用户体验
- 在iOS 15 Safari上测试;验证CSS网格支持
操作(产品如何使用)
子类别:
- 常用使用:快乐路径工作流
- 极端使用:边缘情况、压力条件
- 用户管理:角色、权限、配置文件
- 管理操作:配置、监控
- 恢复:备份、还原、灾难恢复
示例测试想法:
- 执行10,000并发用户会话;监控资源使用
- 中途撤销管理员访问;确认立即生效
- 从24小时前备份还原;验证数据完整性
时间(事情何时发生)
子类别:
- 并发:并行操作、竞争条件
- 调度:定时任务、定时事件
- 序列:操作顺序、依赖
示例测试想法:
- 两个用户同时更新相同记录;确认冲突解决
- 在夏令时转换时执行计划作业;验证正确时间
- 取消操作中途;观察部分状态处理
质量规则
测试想法质量
从不使用“验证X”模式。始终使用行动动词。
| 不良模式 | 良好模式 |
|---|---|
| 验证登录有效 | 提交凭据;确认会话创建 |
| 验证API返回200 | 发送请求;断言200响应 |
| 验证错误显示 | 触发错误;观察消息 |
优先级分布
| 优先级 | 百分比 | 标准 |
|---|---|---|
| P0(关键) | 8-12% | 安全、数据丢失、监管 |
| P1(高) | 20-30% | 核心功能、用户影响 |
| P2(中) | 35-45% | 标准功能、边缘情况 |
| P3(低) | 20-30% | 润色、小改进 |
自动化适用性
| 类型 | 百分比 | 用于 |
|---|---|---|
| 单元 | 30-40% | 隔离逻辑、计算 |
| 集成 | 15-25% | API合同、数据流 |
| 端到端 | <=50% | 用户旅程、工作流 |
| 人工探索 | >=10% | 可用性、边缘情况 |
代理集成
// 完整SFDIPOT评估
await Task("SFDIPOT Assessment", {
input: epicDocument,
outputFormat: "html",
domains: ["ecommerce"],
brutalHonesty: true
}, "qe-product-factors-assessor");
// 转换验证模式
await Task("Rewrite Test Ideas", {
inputFile: assessmentHtml,
preserveMetadata: true
}, "qe-test-idea-rewriter");
内存命名空间
aqe/sfdipot/
├── assessments/* - 评估结果
├── patterns/* - 学习领域模式
├── test-ideas/* - 生成测试想法
└── questions/* - 澄清问题
相关技能
- brutal-honesty-review - 质量验证
- risk-based-testing - 优先级分配
- context-driven-testing - 领域意识
- exploratory-testing-advanced - 会话设计
记住
SFDIPOT通过从7个不同视角检查产品,确保全面测试覆盖。 每个类别揭示其他视角可能忽略的风险。使用领域检测适当加权优先级。