我们如何收集和记录敏捷中的非功能需求
How do we gather and document non-functional requirements in Agile
我知道在瀑布中,它们是在 SDLC 的早期阶段收集和记录的,我相信是在第一阶段。因此,甚至在开发和测试开始之前就捕获并记录了它们。
但我很困惑,这在敏捷中是如何完成的?
如果我理解正确的话,用户故事应该用捕获非功能需求的验收标准编写。但是在敏捷中,我们选择项目,创建它,然后立即开始工作。
所以,我的猜测是有人(可能是产品负责人)浏览用户故事并将验收标准收集到格式化文档中,然后变成非功能需求文档?
首先,为了回答您的问题,我必须明确指出,没有任何敏捷框架或方法试图定义团队可能需要做的所有事情(尤其是 Scrum),因此添加额外的工件或实践并没有错只要不与定义的实践相矛盾,团队就会发现有用。
有几个地方我通常会看到记录了非功能性需求。以下是一些最常见的:
完成的定义
完成的定义包含质量标准,应该应用于所有通过的积压项目。通常这包括 "n% unit test coverage of code"、"code and configuration changes have been peer reviewed" 和 "all automated regression tests have been run and pass" 之类的内容。我有时会看到更广泛的非功能性需求,例如 "no changes cause the application load time to exceed X ms".
建筑设计文档
您仍然可以在敏捷中拥有这些。他们不是在项目开始时就建立完成的架构,而是引入架构必须遵守的约束。随着项目的进展和体系结构决策的制定或更改,这些文档会更新以反映该信息。约束示例可能包括 "System X is considered to be the authoritative source of customer personal data" 或 "Details needed for payment processing should never be available to a public-facing server in order to reduce attack opportunities on that data."
产品租船
根据项目的不同,"starting right away" 有点不稳定。在非常大的项目或产品上,花几天时间(根据我的经验,1 - 3 天是一个不错的数字)来包租项目的情况并不少见。这将包括识别角色,确保业务利益相关者和团队成员对愿景有共同的理解,在高层次上讨论一些预期的用户体验和问题等。非功能性需求在这里出现是很常见的,应该记录在国防部、现有架构文件中,或者在某些情况下记录在积压项目中。发生这种情况的一个很好的例子是一种叫做权衡矩阵的东西。在构建权衡矩阵时,我们会讨论项目的约束条件,例如性能、适应性、功能集、预算、时间等。我们将一个视为主要约束条件,将两个视为次要约束条件,将所有其他视为第三约束条件。这不是一成不变的规则,但它建立了对如何在工作中决定非功能性需求的权衡的一般理解。
积压项目
好的,最后一个。并非所有积压项目都必须是用户故事。如果您有一个可操作的非功能性需求(设置服务器、重新配置防火墙、团队需要转换到 IDE 的新版本),没有什么可以阻止您为此创建积压项目。这不是用户故事,但没关系。我会警告大多数团队发现积压中的用户故事项目数量与其有效交付价值和适应变化的能力之间存在相关性,所以不要得意忘形。但我宁愿看到一个团队在他们的积压工作中加入了非美国国家,而不是试图将这些东西作为用户故事传递出去,比如 "As a firewall, I want to be updated, so we don't get h@XX0rD" <- 我看到的真实积压项目。
最后一点:请记住,在敏捷中,我们努力适应变化,所以不要担心第一次就让 DoD 或架构文档变得完美。它可以随着您了解更多而改变。
我知道在瀑布中,它们是在 SDLC 的早期阶段收集和记录的,我相信是在第一阶段。因此,甚至在开发和测试开始之前就捕获并记录了它们。
但我很困惑,这在敏捷中是如何完成的?
如果我理解正确的话,用户故事应该用捕获非功能需求的验收标准编写。但是在敏捷中,我们选择项目,创建它,然后立即开始工作。
所以,我的猜测是有人(可能是产品负责人)浏览用户故事并将验收标准收集到格式化文档中,然后变成非功能需求文档?
首先,为了回答您的问题,我必须明确指出,没有任何敏捷框架或方法试图定义团队可能需要做的所有事情(尤其是 Scrum),因此添加额外的工件或实践并没有错只要不与定义的实践相矛盾,团队就会发现有用。
有几个地方我通常会看到记录了非功能性需求。以下是一些最常见的:
完成的定义
完成的定义包含质量标准,应该应用于所有通过的积压项目。通常这包括 "n% unit test coverage of code"、"code and configuration changes have been peer reviewed" 和 "all automated regression tests have been run and pass" 之类的内容。我有时会看到更广泛的非功能性需求,例如 "no changes cause the application load time to exceed X ms".
建筑设计文档
您仍然可以在敏捷中拥有这些。他们不是在项目开始时就建立完成的架构,而是引入架构必须遵守的约束。随着项目的进展和体系结构决策的制定或更改,这些文档会更新以反映该信息。约束示例可能包括 "System X is considered to be the authoritative source of customer personal data" 或 "Details needed for payment processing should never be available to a public-facing server in order to reduce attack opportunities on that data."
产品租船
根据项目的不同,"starting right away" 有点不稳定。在非常大的项目或产品上,花几天时间(根据我的经验,1 - 3 天是一个不错的数字)来包租项目的情况并不少见。这将包括识别角色,确保业务利益相关者和团队成员对愿景有共同的理解,在高层次上讨论一些预期的用户体验和问题等。非功能性需求在这里出现是很常见的,应该记录在国防部、现有架构文件中,或者在某些情况下记录在积压项目中。发生这种情况的一个很好的例子是一种叫做权衡矩阵的东西。在构建权衡矩阵时,我们会讨论项目的约束条件,例如性能、适应性、功能集、预算、时间等。我们将一个视为主要约束条件,将两个视为次要约束条件,将所有其他视为第三约束条件。这不是一成不变的规则,但它建立了对如何在工作中决定非功能性需求的权衡的一般理解。
积压项目
好的,最后一个。并非所有积压项目都必须是用户故事。如果您有一个可操作的非功能性需求(设置服务器、重新配置防火墙、团队需要转换到 IDE 的新版本),没有什么可以阻止您为此创建积压项目。这不是用户故事,但没关系。我会警告大多数团队发现积压中的用户故事项目数量与其有效交付价值和适应变化的能力之间存在相关性,所以不要得意忘形。但我宁愿看到一个团队在他们的积压工作中加入了非美国国家,而不是试图将这些东西作为用户故事传递出去,比如 "As a firewall, I want to be updated, so we don't get h@XX0rD" <- 我看到的真实积压项目。
最后一点:请记住,在敏捷中,我们努力适应变化,所以不要担心第一次就让 DoD 或架构文档变得完美。它可以随着您了解更多而改变。