treeify logo
建议

写作建议:让 AI 更准确理解你的需求

产品名称:Treeify
版本:0.2-beta
日期:2025.07.10

清晰、细致、结构化的需求描述,会显著提升 Treeify 生成 测试对象测试场景 的质量与覆盖率。你可以参考下面的写作原则与示例,优化你的输入内容。


✅ 1. 描述要具体、可执行

不要只写“能做什么”,而要写清楚:做什么 / 怎么做 / 失败会怎样 / 有哪些限制

不推荐:

用户可以登录。

推荐:

  • 用户可以使用已注册的邮箱与密码登录。
  • 登录失败时,显示错误提示:“邮箱或密码错误”。
  • 连续 5 次登录失败后锁定账号。

✅ 2. 补充前置条件与结果

原因:前置条件与结果能帮助 Treeify 更准确识别测试边界与预期结果。

示例:

  • 当用户存在未支付账单时,不允许发起新的购买。
  • 支付成功后,跳转到“订单确认”页面。

✅ 3. 写清角色差异与输入变体

原因:不同角色权限、不同输入值、不同状态分支,往往意味着不同的测试路径与覆盖点。

示例:

  • 管理员用户可以访问“用户管理”面板。
  • 普通用户尝试访问同一入口时,应返回“无权限访问”的错误提示。

✅ 4. 补充 UI 触发点与交互细节

原因:UI 触发与交互细节是生成界面类/交互类测试用例的重要依据。

示例:

  • 点击“下载”按钮后,应在新的浏览器标签页中打开文件。
  • 鼠标悬停在商品图片上时,展示放大预览效果。

✅ 5. 一行只写一个需求点

原因:拆分后的需求更便于 AI 精准定位每条意图并逐条分析。

示例:

  1. 仅当必填项全部填写完成后,用户才可以提交表单。
  2. 任一必填项为空时,对该字段显示红色边框,并展示行内提示信息。
  3. 提交成功后,展示 Toast 提示:“表单提交成功”。

Tip:善用富文本编辑能力

建议你在输入时使用富文本编辑器的能力来提升结构表达:

  • 用标题(Headings)组织内容
  • 用加粗(Bold)强调关键规则
  • 用列表(Bullet / Numbered List)拆分条目与分支

🚫 常见坑位(建议避免)

  • 过于笼统(例如:“用户可以更新信息”)
  • 一行混写多个行为,导致边界不清
  • 描述实现细节而不是“行为与结果”(例如写数据库怎么存,而没写用户看到什么)
  • 缺少关键条件、角色差异、异常结果等信息

📋 完整示例(中文)

结算与下单 —— 需求规格说明(示例)

1. 概述

支持已登录用户从购物车发起下单流程:选择配送与支付方式、复核金额汇总(商品金额、税费、运费、优惠)、并在下单成功后获得订单确认信息。

业务目标

  • 提升结算成功率
  • 提供清晰的价格与税费展示
  • 支持优惠码与礼品卡
  • 生成可审计、可合规追溯的订单记录

范围内(In scope)

  • 购物车复核、收货地址、配送方式选择
  • 支付方式选择(信用卡、PayPal)
  • 优惠/折扣、税费计算
  • 订单确认(确认页 + 邮件通知)

范围外(Out of scope)

  • 订阅类商品
  • 门店积分返还/储值退款
  • 会员积分获取(本需求不包含)

2. 参与方与角色

  • 客户(ROLE_CUSTOMER):只能结算并下单自己的购物车
  • 客服(ROLE_SUPPORT):可以查看订单,但不能代客下单
  • 系统:支付网关、税费服务、邮件服务

访问控制

  • 结算相关接口必须是 已登录用户 且拥有 ROLE_CUSTOMER
  • 管理员/客服在结算过程中不得修改客户购物车内容

3. 名词定义

  • 购物车(Cart):用户在下单前选中的商品集合
  • 订单(Order):支付授权成功后创建的不可变记录
  • 应付总额(Grand Total):小计 + 运费 + 税费 − 折扣

4. 前置条件与假设

  • 用户已登录
  • 购物车内至少有 1 件有库存的商品
  • 默认“账单地址 = 收货地址”,除非用户另行填写
  • 支付网关可用;若调用失败,按指数退避策略最多重试 3 次

5. 用户故事

US-1:查看购物车
  • 作为客户,我可以查看商品明细(名称、数量、价格),输入优惠码,并看到金额汇总的实时更新。
US-2:填写配送信息
  • 作为客户,我可以新增/选择收货地址,并选择配送方式(标准/加急)。
US-3:选择支付方式
  • 作为客户,我可以使用信用卡(Visa/Mastercard)或 PayPal 支付。
US-4:提交订单
  • 作为客户,我可以确认订单并在成功后看到确认页,同时收到包含订单信息的邮件。

6. 主流程

6.1 结算流程(Happy Path)
  1. 客户打开 /checkout 页面。
  2. 系统加载购物车、默认地址与可选配送方式。
  3. 客户(可选)填写并应用优惠码。
  4. 客户确认收货地址并选择配送方式。
  5. 客户选择支付方式:
    • 信用卡:填写卡信息(脱敏显示),账单地址默认自动填充。
    • PayPal:跳转到 PayPal 完成授权后,携带 token 返回。
  6. 系统计算 应付总额(Grand Total)(税费由外部税费服务计算)。
  7. 客户点击 提交订单(Place Order)
  8. 系统完成支付授权、创建订单、扣减库存、清空购物车。
  9. 系统展示 订单确认 页面并发送确认邮件。
6.2 替代/边界流程
  • A1:优惠码无效/过期 → 展示错误提示,金额保持不变。
  • A2:该地址无可用配送方式 → 给出引导提示,并禁止继续下一步。
  • A3:支付授权“软拒绝”(soft decline)→ 允许重试或更换支付方式。
  • A4:并发问题:提交时商品刚好售罄 → 展示缺货提示并调整购物车。

7. 输入/输出(字段级)

7.1 输入(表单与接口)
  • 优惠码(Promo Code)(字符串,可选):^[A-Z0-9]{5,10}$
  • 收货地址(Shipping Address)(对象):姓名、地址1、地址2(可选)、城市、州/省、邮编(按国家校验)、国家
  • 配送方式(Shipping Method)(枚举):STANDARDEXPRESS
  • 支付方式(Payment Method)(枚举):CARDPAYPAL
  • 信用卡信息(仅当 CARD)
    • card_number:token 化,Luhn 校验通过
    • exp_month:1–12
    • exp_year:≥ 当前年份
    • cvv:3–4 位数字
  • PayPal Token(仅当 PAYPAL):非空字符串,10 分钟过期
7.2 输出
  • 订单确认信息:order_id、items[]、shipping、tax、discounts[]、totals(subtotal、shipping、tax、grand_total)、payment_status
  • 错误信息:错误码 + 错误文案(见 §10)

8. 校验规则

  • 必填字段必须存在且非空。
  • 邮编必须符合所选国家的格式。
  • 同一时间只允许使用一个有效优惠码。
  • 若支付方式为 PAYPAL,token 必须有效(status=APPROVED)。
  • 若支付方式为 CARD,需通过 Luhn 校验、未过期、CVV 格式正确。

9. 业务规则

  • 税费由外部税费服务根据地址与商品信息计算。
  • 折扣支持 百分比固定金额;折扣后金额不得小于 0。
  • 运费:标准 $5,加急 $15;折扣后小计 > $100 时免运费。
  • 仅在支付授权成功后扣减库存。

10. 异常与错误处理

  • E001 INVALID_PROMO: “优惠码无效或已过期。”
  • E002 SHIPPING_UNAVAILABLE: “该地址暂无可用配送方式。”
  • E003 PAYMENT_DECLINED: “支付授权失败,请重试或更换支付方式。”
  • E004 OUT_OF_STOCK: “部分商品已售罄。”
  • E005 TAX_SERVICE_UNAVAILABLE: “暂时无法计算税费,请稍后再试。”

错误呈现方式:

  • 页面 Toast + 字段级行内提示(如适用)
  • API 返回 error.codeerror.message

11. UI 需求

  • 结算流程为 3 步向导:购物车 → 配送 → 支付 → 复核并下单
  • 所有校验通过前,禁用 提交订单(Place Order) 按钮
  • 信用卡字段必须脱敏;任何场景下不得展示完整卡号(PAN)
  • 每次输入变化后,都要展示价格拆分与更新后的汇总金额

12. API 协议(节选)

POST /api/checkout/apply-promo

请求:

{ "promo_code": "SAVE10" }

响应:

{ "valid": true, "discount_amount": 10.00, "new_totals": { "subtotal": 90.00, "tax": 8.10, "grand_total": 93.10 } }
POST /api/checkout/place-order

请求:

{
  "shipping_address": { "line1": "123 King St", "city": "Singapore", "postal_code": "049483", "country": "SG" },
  "shipping_method": "STANDARD",
  "payment_method": "CARD",
  "card": { "token": "tok_abc", "exp_month": 12, "exp_year": 2030, "cvv": "123" }
}

成功响应:

{
  "order_id": "ORD-2025-000123",
  "payment_status": "AUTHORIZED",
  "totals": { "subtotal": 90.00, "shipping": 5.00, "tax": 8.10, "grand_total": 103.10 }
}

13. 非功能需求

  • 性能:下单接口平均 ≤ 2s;P95 ≤ 4s;支持 500 并发结算
  • 可用性:结算 API 月可用性 99.9%
  • 安全:对齐 PCI-DSS;信用卡 token 化;TLS 1.2+
  • 兼容性:Chrome/Firefox/Safari/Edge(最近 2 个版本);移动端 Safari/Chrome 最新版

了解更多

需要排版参考?请查看:Formatting Tips