软件变化时保持需求可追溯
已完成将用户结果与决策、验收标准、实现和证据关联起来。假设改变时更新这些关联。
检验理解架构和测试准备好之后,规范发生了变化。应该怎么处理?完成练习
你将学到什么
- 编写可观察且边界明确的要求。
- 追踪要求对应的修改和检查。
- 识别假设改变后受影响的下游文档。
描述可以验证的行为
“创建现代化客户导出”没有解决重要决策。它没有定义用户、记录、字段或失败行为。智能体必须询问,或自行假设。未记录的假设以后很难审查。
使用一个边界清楚的虚构要求:通过身份验证的经理可以导出自己组织的活跃客户数据。导出包含客户 ID 和显示名称,不包含联系方式和已归档记录。没有经理角色的用户不能获得导出结果。
仍需决定格式、数据量、响应时间和失败处理。明确标记未知事项。有用的规范会显露不确定性,而不是用自信文字将其掩盖。
区分要求与实现选择
用户需要的是格式可用、且允许访问的一组记录。数据库查询、库和端点结构属于实现选择。将这些选择与要求关联,但不要把每个当前选择都当作永久业务需要。
为重要决策记录背景、备选方案和原因。例如,同步导出可能适合少量数据。更大数据量可能需要后台任务,以及单独的下载授权检查。
在可行时保持要求稳定,同时为改变的决定记录版本。这有助于审查者区分实现变化与对用户承诺的变化。
建立简短证据链
使用在审查中容易理解的标识符。本例可以用 EXPORT-01 标识组织边界。该名称仅作示例,不是规定的编号体系。
| 关联 | 示例 |
|---|---|
| 要求 | EXPORT-01:仅包含经理所属组织的记录 |
| 设计决定 | 在服务端强制落实成员身份要求,而不是在浏览器中 |
| 实现 | PR 修改查询和授权路径 |
| 验证 | 请求其他组织记录时被拒绝 |
| 发布证据 | 检查结果标明已接受的提交和制品 |
证据链必须指向真实证据。测试名称中包含要求 ID,不能证明断言检查了该要求。检查测试,以及它实际覆盖的生产代码路径。
NIST 的 SSDF 为安全开发中的要求和验证提供背景。使用可追溯性,让这些活动可以检查,而不是为了文档本身而写文档。阅读框架。
审查假设变化带来的影响
假设业务现在需要包含已归档客户。这不只是查询标志的变化。检查保留规则、授权、预期数据量、用户说明,以及现有报表的含义。
标记需要复核的文档和检查。保留之前的决定,让运维人员能够解释旧版本。不要悄悄重写历史,仿佛最新设计从一开始就是唯一选择。
智能体可以帮助查找引用并提出更新。相关负责人必须解决要求冲突,并接受改变后的行为。匹配文件列表只是起点,不是完整影响评估。
让记录足够简明,便于使用
记录影响实现、验证和运维的决定。避免在多份互不关联的文档中重复同一要求。优先链接到一份持续维护的来源。
接受修改前,检查审查者能否从其目的追踪到实际证据。运行服务前,检查服务负责人能否找到相关边界和恢复决定。这些都是检验可追溯性是否有用的实际方法。
完成练习
为经理导出活跃客户数据编写要求。包含允许的用户、组织边界、字段、失败行为和可测量的完成条件。将它关联到虚构测试和发布。再把要求改为包含已归档客户,并列出受影响的决定。
下载工作表(Markdown)取消勾选将删除此浏览器保存的全部进度。
进度保存在此浏览器中。无需账户,不追踪使用情况。
来源与延伸阅读
- NIST: Secure Software Development Framework ↗
- Google Engineering Practices: What to look for in a code review ↗